Sql 子查询聚合问题
有以下查询的问题:Sql 子查询聚合问题,sql,sql-server,Sql,Sql Server,有以下查询的问题: SELECT * FROM [projectuser].[dbo].[newdataset] WHERE ( Datediff(s, '1970-01-01 00:00:00', Max(dob)) ) >= (SELECT Datediff(s, '1970-01-01 00:00:00', Max(dob)) - 3600 FROM [projectuser].[dbo].[sqlquries7]) OR
SELECT *
FROM [projectuser].[dbo].[newdataset]
WHERE ( Datediff(s, '1970-01-01 00:00:00', Max(dob)) )
>=
(SELECT Datediff(s, '1970-01-01 00:00:00', Max(dob)) - 3600
FROM [projectuser].[dbo].[sqlquries7])
ORDER BY dob
错误消息:
除非是在一个集合中,否则集合不能出现在WHERE子句中
HAVING子句或select列表中包含的子查询,以及列
聚合是一个外部引用
基于更改数据捕获,尝试从当前最大日期目标中选择1小时记录源,该目标位于将日期时间转换为历元的历元日期时间中。外部查询将是源,内部查询是目标
请帮帮我。
谢谢你重新考虑你的问题。您有一个来自外部源的计算值和一个来自内部源的计算值。您使用的是不带GROUP BY的MAX,表示要比较每个表中的单个值。如果值DateDiff为'1970-01-01 00:00:00',Maxdob大于从[projectuser].[dbo].[sqlquries7]选择DateDiff'1970-01-01 00:00:00',Maxdob-3600返回的值,则将返回[projectuser].[dbo].[newdataset]中的所有行 也就是说,如果您现有的逻辑起作用 因此,你首先需要做的是定义你真正想要的是什么。这应该包括您要查找的行,即新数据集中的所有行,其中dob位于从sqlqueries表计算的值之后 请注意,使用sqlqueries表中单个值的方法是将结果放入变量中,例如:
DECLARE @mdob datetime
SELECT @mdob = Datediff(s, '1970-01-01 00:00:00', Max(dob)) - 3600
FROM [projectuser].[dbo].[sqlquries7]
或使用单个值创建派生表,并将其交叉连接到其他记录集,例如:
SELECT *
FROM [projectuser].[dbo].[newdataset] nds
CROSS JOIN (
SELECT Datediff(s, '1970-01-01 00:00:00', Max(dob)) - 3600 AS Cutoff
FROM [projectuser].[dbo].[sqlquries7]) as Tbl
WHERE ( Datediff(s, '1970-01-01 00:00:00', dob) ) >= Cutoff
但请记住,WHERE子句中的-MAX或MIN、SUM等是不允许的,除非是在特定的、狭义的情况下。如果您需要WHERE子句中的最大值,则必须在其他地方计算它。您在这里想做什么?为什么在datediff中有Maxdob?错误消息的哪一部分不清楚?where子句中不能有聚合。提示…MAX.update您的问题添加适当的数据样本和预期结果。请查找。对不起,你的问题没有任何意义。我认为您需要发布样本数据和期望的结果,以尽可能清楚地说明这一点。