Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.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-GROUPBY始终显示第一行的一列?_Mysql_Group By - Fatal编程技术网

Mysql-GROUPBY始终显示第一行的一列?

Mysql-GROUPBY始终显示第一行的一列?,mysql,group-by,Mysql,Group By,例如,我有一个表测试: 我需要显示每个数字date1和date2 last的文本。 期望结果集: number | text | date1 | date2 1 | c | 2015-02-22 | 2015-02-24 2 | b | 2015-02-22 | 2015-02-23 正确工作选择: SELECT * FROM (SELECT * FROM test ORDER BY date1 DE

例如,我有一个表测试:

我需要显示每个数字date1和date2 last的文本。 期望结果集:

number   | text | date1      | date2
1        | c    | 2015-02-22 | 2015-02-24
2        | b    | 2015-02-22 | 2015-02-23
正确工作选择:

SELECT
  *
FROM
  (SELECT
    *
  FROM
    test
  ORDER BY
    date1 DESC, date2 DESC
  ) as tab
GROUP BY
  number
这是否总是能正常工作


它是否总是显示第一行分组项目的数据?

我不确定是否达到了您的目标,但请尝试以下查询:

SELECT
  test.number,
  test.text,
  t1.date1,
  t1.date2,
FROM test
RIGHT JOIN
  (SELECT
    number, 
    MAX(date1) as date1,
    MAX(date2) as date2,
    MAX(CASE WHEN date2>=date1 THEN date2 ELSE date1 END) as dateMax
  FROM
    test
  GROUP BY number
  ) as t1
ON t1.number=test.number 
   AND (t1.dateMax = test.date1
   OR t1.dateMax = test.date2)

子查询的目的是什么?使用GROUP BY您想要实现什么?可以更详细地解释您的要求:每个数字date1和date2 last的文本,那么为什么它返回2行而不是6行?我只想显示上一个日期的每个数字的一个值。子查询用于对数据进行排序。无子查询:根据结果中的数字从测试组中选择*我得到:数字|文本|日期1 |日期2 1 | a | 2015-02-21 | 2015-02-23 2 | a | 2015-02-21 | 2015-02-21 |问题是,如果有第1行,b行,2015-02-202015-02-28和第1行,c行,2015-02-222015-02-25,结果必须是什么样的?如果有第1行,b,2015-02-202015-02-28和1,c,2015-02-222015-02-25结果必须看起来像1,c,2015-02-222015-02-25。首先我需要检查date1,如果max date1大于1,那么我检查date2首先我需要检查date1,如果max date1大于1,那么我检查date2。例如:1,b,2015-02-202015-02-28和1,c,2015-02-222015-02-25时,此查询不起作用。如果在一行中我有最大的日期1,在另一行中我有最大的日期2,我已经问过你-那么你选择文本的标准是什么?你只需要date1和date2中最大的一个??最大的date1,如果不止一个是最大的date1,那么检查date2。我需要排序顺序中的第一个元素date1 DESC,date2 DESCWHAT!?检查更新的查询,如果它与您的目标不匹配-我在这里已经完成了数据1,b,2015-02-202015-02-28和1,c,2015-02-222015-02-25结果必须看起来是1,c,2015-02-222015-02-25。在这个查询中,我得到了1,b,2015-02-22105-02-28
SELECT
  test.number,
  test.text,
  t1.date1,
  t1.date2,
FROM test
RIGHT JOIN
  (SELECT
    number, 
    MAX(date1) as date1,
    MAX(date2) as date2,
    MAX(CASE WHEN date2>=date1 THEN date2 ELSE date1 END) as dateMax
  FROM
    test
  GROUP BY number
  ) as t1
ON t1.number=test.number 
   AND (t1.dateMax = test.date1
   OR t1.dateMax = test.date2)