Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在mySQL中查询表以按2个字段进行分组?_Mysql_Sql - Fatal编程技术网

如何在mySQL中查询表以按2个字段进行分组?

如何在mySQL中查询表以按2个字段进行分组?,mysql,sql,Mysql,Sql,我卡住了 我正在尝试查询我的一个表,以获得最大的“容器更改日期”,分组对为“容器类型”和“测试单元” 我已经把一个表和一些虚拟数据放在一起(如下),如果您想要创建表模式,请告诉我,我会把它放在注释中。 最终的结果可能需要id,也可能需要整行id 预期结果(如下)的id为-1、2、3、5、7、8 6应作为匹配对拆下(测试单元=4,碳罐类型=一氧化碳),7应作为较晚的“碳罐更换日期”日期拆下 预期结果可能需要id或id以及其他字段 谢谢 您可以像这样在多个列上使用groupby SELECT C

我卡住了

我正在尝试查询我的一个表,以获得最大的“容器更改日期”,分组对为“容器类型”和“测试单元”

我已经把一个表和一些虚拟数据放在一起(如下),如果您想要创建表模式,请告诉我,我会把它放在注释中。

最终的结果可能需要id,也可能需要整行id

预期结果(如下)的id为-1、2、3、5、7、8

6应作为匹配对拆下(测试单元=4,碳罐类型=一氧化碳),7应作为较晚的“碳罐更换日期”日期拆下

预期结果可能需要id或id以及其他字段


谢谢

您可以像这样在多个列上使用
groupby

SELECT COUNT(*) FROM my_table GROUP BY column1, column2
如果要查找某列中值最高的行,则需要
具有
子句和
MAX()
聚合函数。你可以这样组合它们

SELECT max_column, column1, column2
GROUP BY column1, column2          
HAVING max_column = MAX(max_column)

本例假设您希望为
column1
column2
的每一对唯一的
max\u列
查找最大值,其中
不存在

select t.* from tablename
where not exists (
  select 1 from tablename
  where test_cell = t.test_cell and canister_type = canister_type
    and canister_change_date > t.canister_change_date
)
或者,如果您的MySql版本为8.0+且支持窗口功能:

select t.* from (
  select *, 
    row_number() over (partition by test_cell, canister_type order by canister_change_date desc) rn
  from tablename
) t
where t.rn = 1

以表格形式向我们显示您的预期结果。@SQLfiddle此时已关闭。请尝试。SQLfiddle此时已关闭…对于每个容器类型和每个测试单元。这是什么意思?也许您的意思是-对于每个
(容器类型,测试单元)
对?谢谢您的回答,Kacper,不幸的是,当我使用此查询时,最终结果ID与表中的ID不匹配。知道为什么吗?