表#約會:返回行,但過濾器,如果有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只是在錯誤地/不夠清楚地提出問題......或者讓他決定他是否在尋找 - 不然。 –