sql返回表中每个月的第1天

时间:2017-04-21 19:58:32

标签: sql sql-server

我有一个像两个列一样的SQL表...

3/1/17 100

3/2/17 200

3/3/17 300

4/3/17 600

4/4/17 700

4/5/17 800

我正在尝试运行一个查询,该查询返回上表中每个月的第一天,并获取相应的值。

结果应该是

3/1/17 100

4/3/17 600

然后,一旦我得到这些结果......对每一个做一些事情。 我有什么想法可以开始?

2 个答案:

答案 0 :(得分:2)

在标准SQL中,您将使用row_number()

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

大多数数据库都支持此功能,但确切的功能(特别是日期)可能因数据库而异。

答案 1 :(得分:1)

另一种选择(SQL Server风格):

SELECT t.*
FROM YourTable t
JOIN (
    select MIN(DateColumn) as MinimumDate
    from YourTable
    group by FORMAT(DateColumn,'yyyyMM')
) q on (t.DateColumn = q.MinimumDate)
ORDER BY t.DateColumn;

对于GROUP BY,这也没关系:

group by YEAR(DateColumn), MONTH(DateColumn)

group by DATEPART(YEAR,DateColumn), DATEPART(MONTH,DateColumn)