2017-09-01 25 views
0

我想從具有id和2個JSONB列的BD中獲取指定日期之前的最後一個給定值(在本例中爲2015-09-30)像這樣:在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... 
    ] 

我以後的查詢應該給;

  • 編號
  • 日期前
  • 首先值
  • 如果前日期=「使用inStock」第一stock_status

但我不能得到正確的時間戳,它給前後面的所有值日期如果stock_status是「instock」。我的查詢:

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); 

我想這給我只有一個結果從上面的DB-爲例回來,一個ID爲1

任何提示嗎?這已經掘進了我一對夫婦現在幾天的瘋狂......

+1

你是什麼意思,一半是前半和後半。 –

+0

@FahadAnjum我的意思是,一半的結果是正確的最後一個日期,一半是第一個日期,例如,如果jsonb是[[「值」:4290,「時間」:「2014-05-15T05:31: 45.077483Z「}, {」value「:3490,」time「:」2014-09-02T04:32:32.094733Z「}]'另一個是[[{」value「:3490,」time「:」2014 -09-02T04:32:32.094733Z「}, {」value「:3690,」time「:」2015-01-16T04:32:28.679849Z「}]'結果是'」2014-09-02T04: 32:32.094733Z「'(right)and'」2014-09-02T04:32:32.094733Z「'(錯誤的,應該是」2015-01-16T04:32:28.679849Z「)。 – Elmseld

回答

0

酒店我解決了它這樣的結尾:

SELECT DISTINCT ON (sph.id) sph.id, elem1->>'value' as value, elem1->>'time' as time, elem2->>'stock_status' as stock_status 
    FROM table as sph 
    join table2 as sp on sph.id = sp.id, 
    jsonb_array_elements(sph.value_column) as array1(elem1), 
    jsonb_array_elements(sph. stock_status_coulmn) as array2(elem2) 

    WHERE elem1#>>'{time}' <= '2015-09-30' and elem2#>>'{time}' <= '2015-09-30' 
ORDER BY sph.id, elem1#>>'{time}' DESC, elem2#>>'{time}' DESC; 

於是我整理掉,這是outofstock行和與錯誤的值我代碼(elixir),不知道這是最好的方法,但對我來說無論如何都適用。 :)

相關問題