表#预约:
ID, Name, LocationID, Created
目前我有:
SELECT *
FROM Appointments
WHERE Created <= @today
ORDER BY ID
问题是,有时候给定的行数超过1行 LocationID ,在这种情况下,我想返回具有最新日期的那个。
查询会是什么样的?
答案 0 :(得分:7)
您没有提到您正在使用的SQL Server的版本 - 但如果您使用的是2005或更新版本,则可以使用{{1的CTE(公用表表达式)功能:
ROW_NUMBER
此CTE按DECLARE @today DATETIME = .........
;WITH LastAppt AS
(
SELECT
ID, Name, LocationID, Created,
ROW_NUMBER() OVER(PARTITION BY LocationID ORDER BY Created DESC) AS 'RowNum'
FROM dbo.Appointments
WHERE Created <= @today
)
SELECT
ID, Name, LocationID, Created
FROM LastAppt
WHERE RowNum = 1
ORDER BY ID
“分区”您的数据,对于每个分区,LocationID
函数会发出序号,从1开始并按ROW_NUMBER
排序 - 所以最新一行得到Created DESC
(对于每个RowNum = 1
),这是我在后面的SELECT语句中从CTE中选择的。
答案 1 :(得分:3)
您提出的问题是不可能的。
如果您的WHERE
子句指定:
WHERE Created = @today
然后根据定义,您的所有行都会包含 IDENTICAL Created
字段。
您是否还想使用其他字段?