Sql 每个ID返回2个唯一答案
我有一个SQL查询,它为我需要的东西提取了太多的信息。我当前的查询如下所示:Sql 每个ID返回2个唯一答案,sql,sql-server,Sql,Sql Server,我有一个SQL查询,它为我需要的东西提取了太多的信息。我当前的查询如下所示: USE LetterGeneration SELECT g.LetterGenerationTemplateRequestId, cast(H.CreatedDate as time) as Time, s.StatusKey FROM LetterGenerationStatusHistory H INNER JOIN LetterGenerationStatus S ON H.L
USE LetterGeneration
SELECT g.LetterGenerationTemplateRequestId,
cast(H.CreatedDate as time) as Time,
s.StatusKey
FROM LetterGenerationStatusHistory H
INNER JOIN LetterGenerationStatus S
ON H.LetterGenerationStatusId = s.LetterGenerationStatusId
INNER JOIN LetterGeneration G
ON g.LetterGenerationId = h.LetterGenerationId
WHERE g.LetterGenerationTemplateRequestId IN (SELECT [LetterGenerationTemplateRequestId]
FROM [LetterGenerationTemplateRequest]
WHERE CreatedDate >= DATEADD(day,-90, GETDATE()))
AND (s.StatusKey = 'QC1'
OR s.StatusKey = 'Ready')
ORDER BY LetterGenerationTemplateRequestId, h.CreatedDate ASC
LetterGenerationTemplateRequestId Time StatusKey
1732189 01:14:24.1700000 QC1
1732189 10:13:25.4730000 READY
1732190 01:14:26.6600000 QC1
1732190 01:14:26.7230000 QC1
1732190 01:14:26.7970000 QC1
1732190 01:14:26.8770000 QC1
1732190 01:14:26.9500000 QC1
1732190 01:14:27.0370000 QC1
1732190 01:14:27.1100000 QC1
1732190 04:29:17.7170000 READY
1732190 04:29:33.8500000 READY
1732190 04:29:50.7900000 READY
Request ID Time Status
1732189 1:14:24 AM QC1
1732189 10:13:25 AM READY
1732190 1:14:27 AM QC1
1732190 4:29:18 AM READY
1732191 1:14:30 AM QC1
1732191 4:39:28 AM READY
我得到的结果如下所示:
USE LetterGeneration
SELECT g.LetterGenerationTemplateRequestId,
cast(H.CreatedDate as time) as Time,
s.StatusKey
FROM LetterGenerationStatusHistory H
INNER JOIN LetterGenerationStatus S
ON H.LetterGenerationStatusId = s.LetterGenerationStatusId
INNER JOIN LetterGeneration G
ON g.LetterGenerationId = h.LetterGenerationId
WHERE g.LetterGenerationTemplateRequestId IN (SELECT [LetterGenerationTemplateRequestId]
FROM [LetterGenerationTemplateRequest]
WHERE CreatedDate >= DATEADD(day,-90, GETDATE()))
AND (s.StatusKey = 'QC1'
OR s.StatusKey = 'Ready')
ORDER BY LetterGenerationTemplateRequestId, h.CreatedDate ASC
LetterGenerationTemplateRequestId Time StatusKey
1732189 01:14:24.1700000 QC1
1732189 10:13:25.4730000 READY
1732190 01:14:26.6600000 QC1
1732190 01:14:26.7230000 QC1
1732190 01:14:26.7970000 QC1
1732190 01:14:26.8770000 QC1
1732190 01:14:26.9500000 QC1
1732190 01:14:27.0370000 QC1
1732190 01:14:27.1100000 QC1
1732190 04:29:17.7170000 READY
1732190 04:29:33.8500000 READY
1732190 04:29:50.7900000 READY
Request ID Time Status
1732189 1:14:24 AM QC1
1732189 10:13:25 AM READY
1732190 1:14:27 AM QC1
1732190 4:29:18 AM READY
1732191 1:14:30 AM QC1
1732191 4:39:28 AM READY
我想要的是,对于状态为QC1和状态为READY的每个请求ID,只看到一个结果。所以理想情况下,它应该是这样的:
USE LetterGeneration
SELECT g.LetterGenerationTemplateRequestId,
cast(H.CreatedDate as time) as Time,
s.StatusKey
FROM LetterGenerationStatusHistory H
INNER JOIN LetterGenerationStatus S
ON H.LetterGenerationStatusId = s.LetterGenerationStatusId
INNER JOIN LetterGeneration G
ON g.LetterGenerationId = h.LetterGenerationId
WHERE g.LetterGenerationTemplateRequestId IN (SELECT [LetterGenerationTemplateRequestId]
FROM [LetterGenerationTemplateRequest]
WHERE CreatedDate >= DATEADD(day,-90, GETDATE()))
AND (s.StatusKey = 'QC1'
OR s.StatusKey = 'Ready')
ORDER BY LetterGenerationTemplateRequestId, h.CreatedDate ASC
LetterGenerationTemplateRequestId Time StatusKey
1732189 01:14:24.1700000 QC1
1732189 10:13:25.4730000 READY
1732190 01:14:26.6600000 QC1
1732190 01:14:26.7230000 QC1
1732190 01:14:26.7970000 QC1
1732190 01:14:26.8770000 QC1
1732190 01:14:26.9500000 QC1
1732190 01:14:27.0370000 QC1
1732190 01:14:27.1100000 QC1
1732190 04:29:17.7170000 READY
1732190 04:29:33.8500000 READY
1732190 04:29:50.7900000 READY
Request ID Time Status
1732189 1:14:24 AM QC1
1732189 10:13:25 AM READY
1732190 1:14:27 AM QC1
1732190 4:29:18 AM READY
1732191 1:14:30 AM QC1
1732191 4:39:28 AM READY
等
如何将结果限制为每个ID仅显示1个状态结果?我在这里检查了一些其他问题,并试图调整它们以适应我的查询,但我对SQL的有限知识使其变得非常困难。您可以使用行号:
ROW_NUMBER语法中的ORDER BY指定所需的行。在本例中,它是最近的一行
您可以更改外部的1,以获得每组任意多的行。使用您正在使用的数据库标记您的问题。请使用哪个数据库标记您的问题。每个id/状态的显示时间是什么时候?数据库名称是LetterGeneration,我使用的是Microsoft SQL Server Management Studio 2008尝试此操作时,我发现位于最后一个t上方的单个t出现错误,clauseI修复了t缺少右括号的问题,我得到了一些结果,但这只是就绪状态,不是QC1状态too@D.Morley . . . 对这个问题的误解。只需将状态添加到分区中即可。