表#约会:返回行,但过滤器,如果有1+行与同locationID
ID, Name, LocationID, Created
目前我有:
SELECT *
FROM Appointments
WHERE Created <= @today
ORDER BY ID
的问题是,有些时候有次对于给定的 LocationID多于1行,并且在这种情况下,我想返回具有最新日期的那一行。
查询将是什么样子?
表#约会:返回行,但过滤器,如果有1+行与同locationID
ID, Name, LocationID, Created
目前我有:
SELECT *
FROM Appointments
WHERE Created <= @today
ORDER BY ID
的问题是,有些时候有次对于给定的 LocationID多于1行,并且在这种情况下,我想返回具有最新日期的那一行。
查询将是什么样子?
你没有提到什么你使用SQL Server的版本 - 但如果你使用2005或更高版本,可以使用CTE(公共表表达式)与ROW_NUMBER
功能:
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
这CTE“分区”您的数据由LocationID
,并为每个分区,ROW_NUMBER
功能转手出去顺序编号,从1开始,并通过Created DESC
订购 - 所以最新行都获得RowNum = 1
(每个ID
),这是我选择从它后面的SELECT语句中的CTE开始。
您正在定位的问题是不可能的。
如果您WHERE
子句指定:
WHERE Created = @today
然后,通过定义所有的行会IDENTICALCreated
领域。
是否有另一个领域,你想使用它?
'你的权利,它应该<= @今天 – codecompleting
请注意他的问题实际上不可能如上所述。有些东西正在被遗漏。 – JNK
在结尾处填写有序的'ORDER BY ID'行,它应该按照指定行事。 –
@JNK:你是对的 - 但我敢打赌OP只是在错误地/不够清楚地提出问题......或者让他决定他是否在寻找 - 不然。 –