sql - T-SQL,如何执行此分组查询?

标签 sql sql-server sqlite t-sql

我对此信息有一个看法:

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 中尝试此查询,我会收到一条错误,指出 IDTableBselect 不包含在 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/

相关文章:

sql - 多部分标识符不能绑定(bind)在左外连接上

mysql - 什么是 BENCHMARK(count, expr)?

mysql - 获取 MYSQL 查询中的行位置

MYSQL "SELECT CASE" View 语法错误

sql-server - SQL Server : converting UniqueIdentifier to string in a case statement

sql-server - SSIS 2012 无法使用项目级连接部署包

c# - 如何从存储过程中获取 SQL 字符串结果并将其保存在 C# Windows 应用程序字符串变量中

iOS Swift SQLite 添加列到表问题

c# - SQLite 错误 : near "s": syntax error

android - 如何在android中将.db文件转换为MySQL数据库?