SQL 尝试获取记录的最大(日期)时帮助获取重复项
SQL HELP getting duplicates when trying to get max(Date) for record
需要一些帮助,下面是我的 SQL:我得到了重复项,但不会 return 我的 LastRespondedDate 字段。任何帮助将不胜感激。
SELECT t.[column1],
pr.[column1],
pr.[RespondedDttm],
t.[column2],
t.[column3],
t.[column4]
FROM Table1 t LEFT JOIN
(
SELECT [t.column1], [pr.column2], [RespondedDttm], MAX([RespondedDttm]) AS LastRespondedDate
FROM Table2 pr
GROUP BY [column1], RespondedDttm, [pr.column3]) pr
ON (t.[column1] = pr.[column1])
WHERE t.[column8] IN (value) AND
(pr.[RespondedDttm] >= '2015-09-01') AND
(pr.[Response] IS NOT Null)
SELECT
t.[column1],
pr.[RespondedDttm] as LastRespondedDate,
t.[column2],
t.[column3],
t.[column4]
FROM
Table1 t
LEFT JOIN
(
SELECT
t2.[Column1]
,t2.[column2]
,[RespondedDttm]
,RowNum = ROW_NUMBER() OVER (PARTITION BY ColWithDups ORDER BY [RespondedDttm])
,WithTiesRowNum = RANK() OVER (PARTITION BY ORDER BY [RespondedDttm] DESC)
FROM
Table2 t2
WHERE
t2.[RespondedDttm] >= '2015-09-01'
AND t2.[Response] IS NOT Null
) pr
ON (t.[column1] = pr.[column1])
AND pr.RowNum = 1
--AND pr.WithTiesRowNum = 1 --use this line if you want ties
WHERE
t.[column8] IN (value)
您可以使用 window 函数,如果您只想要 1 行,则可以使用 ROW_NUMBER,如果您想要所有关系,则可以使用 RANK()。
如果你想要我认为你评论建议的细微差别的另一个方向:
SELECT
t.[column1],
pr.[RespondedDttm] as LastRespondedDate,
t.[column2],
t.[column3],
t.[column4]
FROM
Table1 t
LEFT JOIN
(
SELECT
t2.[Column1]
,t2.[column2]
,[RespondedDttm]
,RowNum = ROW_NUMBER() OVER (PARTITION BY ColWithDups ORDER BY [RespondedDttm])
,WithTiesRowNum = RANK() OVER (PARTITION BY ORDER BY [RespondedDttm] DESC)
FROM
Table2 t2
) pr
ON (t.[column1] = pr.[column1])
AND pr.[RespondedDttm] >= '2015-09-01'
AND pr.[Response] IS NOT Null
AND pr.RowNum = 1
--AND pr.WithTiesRowNum = 1 --use this line if you want ties
WHERE
t.[column8] IN (value)
需要一些帮助,下面是我的 SQL:我得到了重复项,但不会 return 我的 LastRespondedDate 字段。任何帮助将不胜感激。
SELECT t.[column1],
pr.[column1],
pr.[RespondedDttm],
t.[column2],
t.[column3],
t.[column4]
FROM Table1 t LEFT JOIN
(
SELECT [t.column1], [pr.column2], [RespondedDttm], MAX([RespondedDttm]) AS LastRespondedDate
FROM Table2 pr
GROUP BY [column1], RespondedDttm, [pr.column3]) pr
ON (t.[column1] = pr.[column1])
WHERE t.[column8] IN (value) AND
(pr.[RespondedDttm] >= '2015-09-01') AND
(pr.[Response] IS NOT Null)
SELECT
t.[column1],
pr.[RespondedDttm] as LastRespondedDate,
t.[column2],
t.[column3],
t.[column4]
FROM
Table1 t
LEFT JOIN
(
SELECT
t2.[Column1]
,t2.[column2]
,[RespondedDttm]
,RowNum = ROW_NUMBER() OVER (PARTITION BY ColWithDups ORDER BY [RespondedDttm])
,WithTiesRowNum = RANK() OVER (PARTITION BY ORDER BY [RespondedDttm] DESC)
FROM
Table2 t2
WHERE
t2.[RespondedDttm] >= '2015-09-01'
AND t2.[Response] IS NOT Null
) pr
ON (t.[column1] = pr.[column1])
AND pr.RowNum = 1
--AND pr.WithTiesRowNum = 1 --use this line if you want ties
WHERE
t.[column8] IN (value)
您可以使用 window 函数,如果您只想要 1 行,则可以使用 ROW_NUMBER,如果您想要所有关系,则可以使用 RANK()。
如果你想要我认为你评论建议的细微差别的另一个方向:
SELECT
t.[column1],
pr.[RespondedDttm] as LastRespondedDate,
t.[column2],
t.[column3],
t.[column4]
FROM
Table1 t
LEFT JOIN
(
SELECT
t2.[Column1]
,t2.[column2]
,[RespondedDttm]
,RowNum = ROW_NUMBER() OVER (PARTITION BY ColWithDups ORDER BY [RespondedDttm])
,WithTiesRowNum = RANK() OVER (PARTITION BY ORDER BY [RespondedDttm] DESC)
FROM
Table2 t2
) pr
ON (t.[column1] = pr.[column1])
AND pr.[RespondedDttm] >= '2015-09-01'
AND pr.[Response] IS NOT Null
AND pr.RowNum = 1
--AND pr.WithTiesRowNum = 1 --use this line if you want ties
WHERE
t.[column8] IN (value)