我对此信息有一个看法:
TableA (IDTableA, IDTableB, IDTableC, Active, date, ...)
对于 TableA
中的每个寄存器和 tableC
中的每个寄存器,我希望 tableB
的寄存器具有最大日期并且处于事件状态。
select IDTableA, IDtableC, IDTableB, Date, Active
from myView
where Active = 1
group by IDTableA, IDTableC
Having Max(Date)
order by IDTableA;
此查询适用于 SQLite
,但如果我在 SQL Server
中尝试此查询,我会收到一条错误,指出 IDTableB
在 select
不包含在 group
子句中。
我知道理论上 SQLite 中的第一个查询不应该工作,但还是要这样做。
如何在 SQL Server 中执行此查询?
谢谢。
最佳答案
根据 SQL 92,如果使用 GROUP BY
子句,则在 SELECT
输出表达式列表中只能使用 GROUP BY
中提到的列> 列表或任何其他列,但它们必须包装在聚合函数中,例如 count()
、sum()
、avg()
、max()
、min()
和 so on .
像 MSSQL、Postgres 这样的一些服务器对此规则非常严格,但例如 MySQL 和 SQLite 则非常宽松和宽容 - 这就是它让您感到惊讶的原因。
长话短说 - 如果您希望它在 MSSQL 中工作,请遵守 SQL92 要求。
关于sql - T-SQL,如何执行此分组查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14786764/