我正在使用MS SQL數據庫。我需要按照最大值選擇行,而不是重複。請嘗試下面的SQL QUERY按照最大值返回所選行,不使用MS SQL重複
但它給出了重複的值。
我需要評分值和CID根據MAX(FDateTime)
。我怎樣才能達到這個結果?
我已經嘗試過內連接的概念,但我曾經遇到過這個概念上的一些錯誤。
我正在使用MS SQL數據庫。我需要按照最大值選擇行,而不是重複。請嘗試下面的SQL QUERY按照最大值返回所選行,不使用MS SQL重複
但它給出了重複的值。
我需要評分值和CID根據MAX(FDateTime)
。我怎樣才能達到這個結果?
我已經嘗試過內連接的概念,但我曾經遇到過這個概念上的一些錯誤。
試試這個
SELECT CID ,Rate ,FDateTime
FROM (SELECT CID ,Rate ,FDateTime,RANK() OVER (PARTITION BY CID ORDER BY FDateTime DESC) rank
FROM FTable WHERE OId = 1413 and TYPE = 'C') AS T WHERE rank=1
ORDER BY CID
它不會工作,仍然是給重複的值 –
@NIKHILKA你可以附上截圖? –
「106 \t \t 6 2016年5月12日16:15:06.340 \t 6 15 2016年7月28日:33:06.247 \t 6 20 2016年8月9日:37:33.643 2016-08-08 21:23:00.487 2016-05-18 12:50:35.210' –
使用row_number()
:
select ft.*
from (Select ft.*,
row_number() over (partition by cid, rate order by fdatetime desc) as seqnum
from FTable ft
where ft.OId = 1413 and ft.type = 'C'
) ft
where seqnum = 1;
對於您應該使用窗函數(如果你的SQL Server版本允許的話):
WITH TMP AS (
SELECT CId, Rate, ROW_NUMBER() OVER(PARTITION BY CId, Rate ORDER BY FDateTeim DESC) AS RNK
FROM my_table
WHERE ....)
SELECT CId, Rate
FROM TMP
WHERE RNK = 1
我已經試過這一個,但仍然獲得重複記錄 –
我真的很感興趣,看到這一點。 row_number保證你在分區子句上的唯一性。所以對於這個問題,它不能返回一個重複的行。現在,如果你仍然認爲你有一些重複的記錄,然後張貼數據和數據出來的表結構需要 – Nemeros
您可以使用OUTER APPLY獲得MAX(FDateTime)
特定OId
和[type]
:
;WITH FTable AS (
SELECT *
FROM (VALUES
(106, 6, '2016-05-12 16:15:06.340','C',1413),
(109, 6, '2016-07-28 15:33:06.247','C',1413),
(109, 6, '2016-08-09 20:37:33.643','C',1413),
(111, 6, '2016-08-08 21:23:00.487','C',1413),
(106, 7, '2016-05-18 12:50:35.210','C',1433)
) as t(CId,Rate,FDateTime,[type],OId)
)
SELECT f.CId,
f.Rate,
f.FDateTime
FROM FTable f
OUTER APPLY (
SELECT MAX(FDateTime) fdate
FROM FTable
WHERE OId = f.OID and [type] = f.[type]
) as t
WHERE f.OId = 1413 and f.[type] = 'C' and t.fdate=f.FDateTime
輸出:
CId Rate FDateTime
109 6 2016-08-09 20:37:33.643
所有MAX(FDateTime)率和CID = 'C'
select CId,
Rate,
FDateTime
from FTable f
where OId = 1413 and type = 'C'
and FDateTime = (select Max(f2.FDateTime)
from FTable f2
where f2.OId=f.Oid and f2.type = f.type)
它只返回一條記錄,我需要所有cid的最新FDateTime記錄 –
請將預期結果和樣本結果作爲文本發佈並解釋以及它 – TheGameiswar
查詢應該返回單行還是FDateTime = max(FDateTime)的所有行? – Serg