Je veux obtenir la dernière valeur donnée avant une date spécifique (dans ce cas 2015-09-30) à partir d'un BD avec ID et 2 colonnes JSONB qui semblent comme ceci:dernière valeur donnée avant une date spécifique d'une colonne JSONB
1,
[
{"value": 4290, "time": "2014-05-15T05:31:45.077483Z"},
{"value": 3490, "time": "2014-09-02T04:32:32.094733Z"},
{"value": 3690, "time": "2015-01-16T04:32:28.679849Z"}, etc...
],
[
{"stock_status": "instock", "time": "2014-06-15T05:31:45.077483Z"},
{"stock_status": "outofstock", "time": "2014-07-02T04:32:32.094733Z"},
{"stock_status": "instock", "time": "2015-01-26T04:32:28.679849Z"}, etc...
],
2,
[
{"value": 4598, "time": "2013-05-15T05:31:45.077483Z"},
{"value": 3456, "time": "2014-04-02T04:32:32.094733Z"},
{"value": 4354, "time": "2015-06-16T04:32:28.679849Z"}, etc...
]
[
{"stock_status": "outofstock", "time": "2014-06-15T05:31:45.077483Z"},
{"stock_status": "instock", "time": "2014-07-02T04:32:32.094733Z"},
{"stock_status": "outofstock", "time": "2015-01-26T04:32:28.679849Z"}, etc...
]
La requête que je suis après devrait donner;
- Id
- Première valeur avant la date
- si la première stock_status avant la date = "instock"
Mais je ne peux pas les horodatages droite, il rend toutes les valeurs avant la date si any stock_status est "instock". Ma Recherche:
SELECT sph.id, elem1->>'value', elem1->>'time'
FROM table as sph,
jsonb_array_elements(sph.value_column) as array1(elem1),
jsonb_array_elements(sph.stock_status_coulmn) as array2(elem2)
where elem1 = (select elem1
where elem1->> 'time' <= '2015-09-30' and elem2->> 'time' <= '2015-09-30' and elem2->>'stock_status' = 'instock'
order by elem1->>'time' desc
limit 1);
Je veux que cela me donne un seul résultat en retrait de la db-dessus exemple, celui avec id 1.
Des conseils? Ce sont me drived fou dans quelques jours maintenant ...
Que voulez-vous dire par la moitié et la moitié d'abord. –
@FahadAnjum Je veux dire que la moitié des résultats est juste avec les dernières dates et la moitié prend les premières dates, par exemple si le jsonb est '[{" value ": 4290," time ":" 2014-05-15T05: 31: 45.077483Z "}, {" value ": 3490," time ":" 2014-09-02T04: 32: 32.094733Z "}]' et un autre est '[" "value": 3490, "time": "2014 -09-02T04: 32: 32.094733Z "}, {" value ": 3690," time ":" 2015-01-16T04: 32: 28.679849Z "}]' le résultat est '" 2014-09-02T04: 32: 32.094733Z "' (droite) et '" 2014-09-02T04: 32: 32.094733Z "' (faux, devrait être "2015-01-16T04: 32: 28.679849Z"). – Elmseld