我有一个像两个列一样的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
然后,一旦我得到这些结果......对每一个做一些事情。 我有什么想法可以开始?
答案 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)