Ich möchte den letzten gegebenen Wert vor einem bestimmten Datum (in diesem Fall 2015-09-30) von einem BD mit on ID und 2 JSONB-Spalte, die aussieht wie folgt:letzten gegebenen Wert vor einem bestimmten Datum aus einer JSONB-Spalte
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...
]
Die Abfrage, nach der ich bin, sollte geben;
- Id
- Erster Wert vor dem Datum
- , wenn das erste stock_status vor date = "instock"
Aber ich kann den Zeitstempel richtig nicht bekommen, sie alle Werte zurückgibt, bevor die Datum, wenn ein stock_status "instock" ist. Meine Frage:
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);
Ich möchte mich das nur ein Ergebnis zurück aus der db-exemple oben geben, die mit ID 1.
Irgendwelche Tipps? Diese drived haben mich jetzt in ein paar Tagen verrückt ...
Was meinst du mit der halben letzten und der ersten Hälfte. –
@FahadAnjum Ich meine, dass die Hälfte der Ergebnisse stimmt mit den letzten Daten und die Hälfte dauert die ersten Daten, zB wenn der Jsonb ist '[{" value ": 4290," time ":" 2014-05-15T05: 31: 45.077483Z "}, {" value ": 3490," time ":" 2014-09-02T04: 32: 32.094733Z "}] und ein anderes ist' [{"value": 3490, "time": "2014 -09-02T04: 32: 32.094733Z "}, {" value ": 3690," time ":" 2015-01-16T04: 32: 28.679849Z "}]' das Ergebnis ist '" 2014-09-02T04: 32: 32.094733Z "' (rechts) und '" 2014-09-02T04: 32: 32.094733Z "' (falsch, sollte "2015-01-16T04: 32: 28.679849Z" sein). – Elmseld