2016-11-04 66 views
2

我一直試圖使這個查詢這麼長時間,我只是放棄了,來到這裏問你一些幫助。真的很多人,很多早上,下午只是試圖制定這個單一的單一查詢,幾乎放鬆了我的想法。無論如何,我會直接和你在一起,在這裏我們去:查詢以獲取月最後記錄期數量postgresql

我有一個表:

 date | quantity | id 
------------+----------+---- 
2016-06-10 |  438 | 27 
2016-06-17 |  449 | 28 
2016-06-24 |  458 | 29 
2016-07-01 |  466 | 30 
2016-07-08 |  468 | 31 
2016-07-15 |  468 | 32 
2016-07-22 |  473 | 33 
2016-07-29 |  473 | 34 
2016-08-05 |  475 | 35 
2016-08-12 |  479 | 36 
2016-08-19 |  488 | 37 
2016-08-26 |  498 | 38 
2016-09-02 |  519 | 39 

我需要從各月內的最後記錄一天的量。我的意思是,從上面的表,我需要以下卷:

 date | quantity | id 
------------+----------+---- 
2016-06-24 |  458 | 29 
2016-07-29 |  473 | 34 
2016-08-26 |  498 | 38 

決賽桌,我真正需要的是這樣的:

 month | quantity 
------------+---------- 
     06 |  458 
     07 |  473 
     06 |  498 

我想組,具有,MAX,連接,聯合任何你可以想象的,只是買不到它。任何想法使這發生?

感謝

+0

'mysql'或'postgresql'?選擇一個 –

+0

postgresql胡安 –

回答

1

Postgres有一個很大的特點稱爲distinct on

select distinct on (date_trunc('month', date)) t.* 
from t 
order by date_trunc('month', date), date desc; 

distinct on恰好返回一行括號鍵的每個值 - 在這種情況下,每月一個。哪一排?數據中遇到的第一行。所以,這將返回每個月的最新日期。

+0

偉大的回答,噢,我的上帝,這正是我需要的。非常感謝!! –

0

ROW_NUMBER()

SQL DEMO

SELECT date_trunc('month', date), 
     quantity 
FROM (   
     SELECT date, quantity, id, 
       ROW_NUMBER() OVER (PARTITION BY date_trunc('month', date) 
            ORDER BY date DESC) as rn 
     FROM Table1 
     ) T 
WHERE T.rn = 1; 

OUTPUT嘗試

|     date_trunc | quantity | 
|-----------------------------|----------| 
|  June, 01 2016 00:00:00 |  458 | 
|  July, 01 2016 00:00:00 |  473 | 
| August, 01 2016 00:00:00 |  498 | 
| September, 01 2016 00:00:00 |  519 | 
+0

作品!謝啦。我真的很感激! –