Nic*_*aro 2 sql sql-server sql-server-2005
我有一个包含INT id和DATETIME日期的表,以及其他字段.每个工作日将行插入此表(不保证),其他几个表使用此id作为外键.
我的问题是,如何获取每月最大日期的ID,然后我可以使用它来加入其他数据表?例如,如果今天流程运行,我希望看到1月31日,2月28日,...,10月31日,11月23日的数据.
我正在使用SQL Server 2005.
我假设您只想要有记录的月份的最后一天(例如,如果 1 月 31 日没有记录,则为 1 月 30 日)。
SELECT
id,
date
FROM (
SELECT
id,
date,
ROW_NUMBER() OVER (PARTITION BY YEAR(date), MONTH(date) ORDER BY DAY(date) DESC) AS rowNum
FROM sometable
) z
WHERE rowNum = 1;
Run Code Online (Sandbox Code Playgroud)
CREATE TABLE #foo (id INT, d DATETIME);
INSERT #foo(id,d) SELECT 1, '20091101'
UNION ALL SELECT 2, '20091102'
UNION ALL SELECT 3, '20091006'
UNION ALL SELECT 4, '20091001'
UNION ALL SELECT 5, '20091002'
UNION ALL SELECT 6, '20090904';
SELECT d, id
FROM
(
SELECT d, id, rn = ROW_NUMBER() OVER
(PARTITION BY DATEDIFF(MONTH, '20000101', d)
ORDER BY d DESC)
FROM #foo
) AS x
WHERE x.rn = 1
ORDER BY x.d;
DROP TABLE #foo;
Run Code Online (Sandbox Code Playgroud)