2016-11-04 106 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

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

相关问题