我有一个视图,其中包含文档 ID 列和日期列以及十几个与此问题无关的其他列。可以有多行具有相同的文档 ID,但日期通常不同。这意味着它是同一个文档,只是其修订版。问题是,如果我有两行文档 ID 和日期相同,我就会得到这两行。我只想得到一个。哪一个并不重要,只要我只得到一个即可。
以下内容重复,文档 ID 和日期相同。
SELECT FSD.*
FROM vFSD FSD
INNER JOIN
(
SELECT InternalID, MAX(FileLastUploadedDate) AS FileLastUploadedDate
FROM vFSD
GROUP BY InternalID
) gFSD ON FSD.InternalID = gFSD.InternalID AND FSD.FileLastUploadedDate = gFSD.FileLastUploadedDate
我也尝试过使用 DISTINCT,但没有解决问题。
SELECT DISTINCT FSD.*
FROM vFSD FSD
INNER JOIN
(
SELECT DISTINCT InternalID, MAX(FileLastUploadedDate) AS FileLastUploadedDate
FROM vFSD
GROUP BY InternalID
) gFSD ON FSD.InternalID = gFSD.InternalID AND FSD.FileLastUploadedDate = gFSD.FileLastUploadedDate
如果两行与相同的最大
ROW_NUMBER
并列,则可以使用 FileLastUploadedDate
仅返回任意一行,以获得 InternalID
WITH CTE
AS (SELECT *,
ROW_NUMBER() OVER (PARTITION BY InternalID
ORDER BY FileLastUploadedDate DESC) AS RN
FROM vFSD)
SELECT InternalID,
FileLastUploadedDate
/*Other desired columns*/
FROM CTE
WHERE RN = 1
Martin 的好方法,了解 SQL CTE 中的WITH 如何处理临时表。集成到 Update 语句中是一个不错的选择
WITH GetBestCSIforUTC
AS
(
Select TopX.utcID, TopX.TheOne
, DetX.CSI , DetX.ExcsByCsiUtc, DetX.LstTExcsByCsiUtc
, ROW_NUMBER() OVER ( PARTITION BY TopX.UTCid ORDER BY TopX.TheOne Desc ) AS RN
From (
-- Selecting from many inner joins
-- The last one represented by TopX and DetX sharing same Fields
)
UPDATE utcInv -- target table, goal set the best CSI id for especific UTCid
Set utcInv.utcCSIDef = UMC.CSI
From [dbo].[cbTUTCinventory] utcInv
inner join (
Select utcID, TheOne
, CSI
From GetBestCSIforUTC -- Reference to my WITH Temp Table
WHERE rn = 1
) UMC on ( UMC.utcID = utcInv.UTCid )