SQL获取每个月的数据集中的最大日期

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.

lin*_*159 7

我假设您只想要有记录的月份的最后一天(例如,如果 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)


Aar*_*and 5

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)