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

私は毎月内部の最後に記録された日から数量を取得する必要があります。私はGROUP、HAVING、MAX、結合、共用体をしようと

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

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

と私は本当に必要ファイナルテーブルはこれです:私は、上記の表から、私は以下のロールを必要とする、意味しますあなたが想像できるものは、買うだけで買うことはできません。これを行うためのアイデアは何ですか?

おかげ

+0

mysqlまたはpostgresql? 1つを選択 –

+0

postgresql Juan –

答えて

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

作品!ありがとう。本当に感謝しております! –

関連する問題