2017-03-06 13 views
0

SQLを月に最初に表示するコードが多数見つかりましたが、データセットに基づいて月の最初の日を表示する必要がありますだけでなく[month] 1st [year]SQLデータセットの月の最初の日を検索する

EX 1:1月1日は休日なので、データセットの月の初日にはなりません.1月の最初の日は1月2日です。 もう1つの例は、月の最初の日付が自分のデータセットの7番目の場合、1番目ではなく7番目の日付を表示したいとします。

これが私のデータでは、私は私が立ち往生保つ

DATE 
---------- 
2016-02-01 
2016-05-02 
2016-06-01  
2016-07-01 
2016-08-04 
2017-02-23 

を表示するにはこれが必要

DATE 
---------- 
2016-02-01 
2016-02-05 
2016-02-08 
2016-02-19 
2016-02-20 
2016-02-22 
2016-05-02 
2016-05-05 
2016-05-07 
2016-05-09 
2016-05-11 
2016-05-23 
2016-06-01  
2016-06-10 
2016-06-20 
2016-06-29 
2016-07-01 
2016-07-07 
2016-07-14 
2016-07-21 
2016-07-28 
2016-07-31 
2016-08-04 
2016-08-10 
2016-08-18 
2017-02-23 
2017-02-30 

を設定し、私はこれが機能すると思ったが、私はその月の分の日付が届きません

select min(load_date) from multi_dt 
group by month(load_date) 

答えて

0

あなたの最初の回答は良かったです。今年もグループ分けする必要がありました。

group by 
month(load_date),year(load_date) 
1

これを試してみてください:

を使用して10
select min(load_date) as min_load_date 
from multi_dt 
group by dateadd(month, datediff(month, 0, load_date) , 0) 

は月だけ返しますが、上記のクエリ内の関数を使用すると、月の最初のを返しますが、そのとき、あなたのグループそれによってdatetimeデータ型として、それは年と月を含めています。

rextesterデモ:http://rextester.com/UJRN68337

リターン:

+---------------+ 
| min_load_date | 
+---------------+ 
| 2016-02-01 | 
| 2016-05-02 | 
| 2016-06-01 | 
| 2016-07-01 | 
| 2016-08-04 | 
| 2017-02-23 | 
+---------------+ 
0

私はrow_number()を使用します。

select t.date 
from (select t.*, 
      row_number() over (partition by year(date), month(date) order by date) as seqnum 
     from t 
    ) t 
where seqnum = 1; 

あなたが任意の追加の列を必要としない場合は、凝集が同等で次のようになります。

select min(t.date) 
from t 
group by year(t.date), month(t.date); 
関連する問題