Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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
Sql 返回聚合结果的其他列_Sql_Sqlite - Fatal编程技术网

Sql 返回聚合结果的其他列

Sql 返回聚合结果的其他列,sql,sqlite,Sql,Sqlite,鉴于: 返回: timestamp | col1 | col2 ============================ xx abc 5 yy abc 4 zz def 7 rr def 6 SELECT timestamp,col1,min(col2) FROM table GROUP BY col1 ORDER BY min(col2) ASC

鉴于:

返回:

timestamp |  col1  |   col2
============================
xx            abc      5
yy            abc      4
zz            def      7
rr            def      6


SELECT timestamp,col1,min(col2) 
FROM table 
GROUP BY col1 
ORDER BY min(col2) ASC
时间戳似乎弄乱了,所以我确信我并没有按预期的方式使用组。如何获得:

xx       abc     4
zz       def     6

对于保证的行为,必须在聚合表达式或GROUP BY子句中具有timestamp字段。如果没有(如示例中所示),则返回的值是不确定的(实际上几乎是随机选择的)

相反,您可以分两步完成此操作,因此永远不要选择任何字段“randonly”

yy     abc      4
rr     def      6

现在让我们把timestamp字段放在GROUPBY子句中。这似乎也不起作用。它产生的行比我要寻找的两行多得多?澄清一点,我对您的SQL没有问题。只是在我的例子中,我有一个穷人的SQL生成器,目前,它不是用来生成这样复杂的查询的。@Dilip-不幸的是,当按
col1
分组时,您需要一个聚合来建立
MAX(col2)
。但是,这样做会将所有时间戳分组在一起。这意味着您需要第二个查询返回并查找与您找到的值关联的时间戳。MySQL中没有一个操作符可以根据与另一个组的最大值关联的值从一个组中选择一个值。
SELECT
  *
FROM
  yourTable
INNER JOIN
  (SELECT col1, MAX(col2) as max_col2 FROM yourTable GROUP BY col1) AS lookup
    ON  yourtable.col1 = lookup.col1
    AND yourtable.col2 = lookup.col2