我发现很多代码让sql显示一个月的第一天,但是我需要根据我的数据集显示一个月的第一天[month] 1st [year]
EX 1:1月1日是假日,所以它永远不会是数据集中月份的第一天,1月的第一天是1月2日。 另一个例子是如果月份的第一个日期是我的数据集中的第7个,我希望看到第7个而不是第1个。
这是我的数据集
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
我需要这个才能显示
DATE
----------
2016-02-01
2016-05-02
2016-06-01
2016-07-01
2016-08-04
2017-02-23
我一直陷入困境,我认为这可能有用,但我没有得到那个月的最短约会
select min(load_date) from multi_dt
group by month(load_date)
答案 0 :(得分:1)
试试这个:
select min(load_date) as min_load_date
from multi_dt
group by dateadd(month, datediff(month, 0, load_date ) , 0)
使用month()
仅返回月份,但使用上面查询中的函数将返回该月的第一个,但是作为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 |
+---------------+
答案 1 :(得分: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);
答案 2 :(得分:0)
您的初步答案很好,您还需要按年份分组。
group by
month(load_date),year(load_date)