我以为我有它,但似乎我错了。
我有一个查询
select PrestatieCode, Uitvoerdatum, Identificatie, Foutmelding
from bam_Zending_AllInstances as zAll
left outer join bam_Zending_CompletedRelationships as zRel on
zAll.ActivityID = zRel.ActivityID
left outer join bam_Prestatie_AllInstances as pAll on
zRel.ReferenceData = pAll.ActivityID
where zAll.Zender = 'BL15'
and ReferenceType = 'Activity'
and Zendingnummer = '632'
这显示了PrestatieCodes列表,也是重复列表。 现在我只需要一个没有重复项的PretatieCodes列表,它应该选择具有最新日期的那个。 datecolumn = Uitvoerdatum。
我以为我会尝试类似的事情:
select max(Uitvoerdatum), PrestatieCode
from bam_Zending_AllInstances as zAll
left outer join bam_Zending_CompletedRelationships as zRel on
zAll.ActivityID = zRel.ActivityID
left outer join bam_Prestatie_AllInstances as pAll on
zRel.ReferenceData = pAll.ActivityID
where zAll.Zender = 'BL15'
and ReferenceType = 'Activity'
and Zendingnummer = '632'
group by PrestatieCode
这给了我想要的东西。但是你可以注意到它没有2列“Identificatie”和Foutmelding。如果我添加这些,它会给我错误
Column 'bam_Prestatie_AllInstances.Identificatie' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
所以我猜我的做法是错的。我需要查看所有列,但仅查看最新的“PrestatieCode”。
我有意义吗?
答案 0 :(得分:1)
在第二个查询中,您说每个唯一PrestatieCode
都需要一个行。因此,具有相同PrestatieCode
的可能多个行的结果集将合并为一行。给出PrestatieCode
的值,因为它在所有这些行中是相同的(如果我们考虑一个特定的组)。 Uitvoerdatum
的值也很简单:您告诉服务器只选择最大值。那么Identificate
呢?它可能有几个不同的值,您没有指定要选择哪一个。如果无关紧要,您也可以max(Identificate)
。如果您知道它们总是相同的,那么对于所有相同的PrestatieCode
,您也可以安全地将该值放入group by
子句中。
无论你决定什么,你都需要给sql server一些关于你感兴趣的值的线索。
答案 1 :(得分:1)
没有任何架构,这有点困难。但你需要尝试的是获取id和max值(所以在你的情况下,PrestatieCode和MAX(Uitvoerdatum),然后做一个子连接)
SELECT YourTabel.*
FROM YourTabel INNER JOIN
(
SELECT PrestatieCode,
MAX(Uitvoerdatum) MaxDates
FROM YourTabel
WHERE YourCondition
GROUP BY PrestatieCode
) YourTableMaxDates ON YourTabel.PrestatieCode = YourTableMaxDates.PrestatieCode
AND YourTabel.Uitvoerdatum = YourTableMaxDates.MaxDates
这可以获得每个PrestatieCode的最新数据
答案 2 :(得分:0)
您还可以在“from”子句中的子查询中添加第二个(尽可能简化,因为您只需要两列),为其命名,并在连接中使用它来限制输出对具有第二个查询值的行的第一个查询。
答案 3 :(得分:0)
我认为您的问题已在here之前得到解答。您会注意到最佳解决方案取决于您使用的服务器,因为许多服务器具有改进这些查询的特殊功能。