[英]SQL Unique Distinct Column 1 and not the other columns
我試圖運行一個sql語句,該語句然后連接2個表,並在ID列上執行不同操作,並運行where子句以將數據過濾到所涉及的一天中的一個小時。 結果將顯示一天中的一個小時,但將刪除重復項,以便為我提供獨特的記錄,我看到了許多帖子,這些帖子有些幫助,有些令人困惑。 到目前為止,這就是我所擁有的。
select DISTINCT FinalID,finaltime,finalos
from dbo.FinalList
join dbo.Users on dbo.FinalList.FinalID = dbo.Users.usersid
WHERE FinalDate >='2014-07-01'
and finaldate <='2014-07-01'
and finaltime >='00:00:00'
and FinalTime <= '00:59:59'
order by FinalDate asc, FinalTime asc
如果我拿走了決賽時間,然后選擇DISTINCT FinalID,則我會得到正確的數字。 但是我想查看來自Finaltime和Finalos的信息,但是一旦我添加了這些信息,它也會嘗試在這些列上做一個與眾不同的結果,而且我得到的結果令人迷惑。 我會做子查詢嗎? ?
好吧,您必須確定所需的值。
也許使用group by
將提供您想要的:
select FinalID, min(finaltime), max(finaltime),
min(finalos), max(finalos)
from dbo.FinalList join
dbo.Users
on dbo.FinalList.FinalID = dbo.Users.usersid
where FinalDate >='2014-07-01' and
finaldate <='2014-07-01' and
finaltime >='00:00:00' and
FinalTime <= '00:59:59'
group by FinalId;
獨特的( https://technet.microsoft.com/zh-cn/library/ms187831%28v=sql.105%29.aspx )語句將為您返回唯一的行。 就是說,在您選擇的列中是唯一的。 因此,如果Col / Row中的一個與另一個不同,則也會作為結果輸出。 您應該使用MAX或Min,然后再分組。
您無需說明如何在具有相同ID但finaltime
和finalos
值不同的各種記錄之間進行決定。
我會假設你的最后時間是你的最晚時間(最大的)和所需的finalos
值與最后的時間一起去。
;
WITH A as
(
select FinalID
, Finaltime
, Finalos
from dbo.FinalList
join dbo.Users
on dbo.FinalList.FinalID = dbo.Users.usersid
WHERE FinalDate >='2014-07-01'
and finaldate <='2014-07-01'
and finaltime >='00:00:00'
and FinalTime <= '00:59:59'
)
, B as
(
SELECT A.FinalID
, A.Finaltime
, A.FinalOS
, RowNumber = ROW_NUMBER() OVER (
PARTITION BY A.FinalID
ORDER BY FinalTime DESC
)
FROM A
)
SELECT FinalID
, FinalTime
, FinalOS
FROM B
WHERE B.RowNumber = 1
ORDER BY
FinalTime
, FinalOS
ETA:固定語法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.