mysql 查询以获取按日期、时间和名称排序的数据(但不想在每个日期下拆分通用名称)

标签 mysql sql

我有一个 MySQL 查询,它生成的输出顺序如下:

current output

相反,我希望输出顺序如下: desired output

我不确定如何编写查询以便它按照我需要的方式对数据进行排序。我需要按日期 DESC 排序的数据,然后按时间 DESC 排序的数据,而且还要将常见的“markers_name”元素组合在一起。 (我只希望每个日期都将它们组合在一起)。

这是我正在使用的查询:

SELECT markers.name AS markers_name, 
       conditions.time AS conditions_time, 
       conditions.date AS conditions_date, 
       station.name AS station_name 
FROM markers, conditions, users 
WHERE conditions.markers_id = markers.id 
AND (conditions.station_id = station.id)
ORDER BY date DESC, markers.name, time DESC 
LIMIT 100

(附:我省略了在输出表中显示 station_name,但它们确实显示在我的真实查询中。)

编辑: 我添加了更多表格以试图更好地解释问题。 请注意,“ block ”并不是真正由查询返回的。我只是添加了它以帮助对话。每个 block 都有一个共同的日期。

这是我尝试 ORDER BY date DESC , markers.name DESC , time DESC 后的输出 Desired output

这是我想要的输出:

enter image description here

比较两个输出中的“Chunk 4”。上表按名称降序排列。这是不希望的。 Marker_name 'd' 有最新的信息,所以我希望它是第一个。 “C”有下一个最新信息。 'f' 具有最旧的信息。下表显示了我需要的顺序。

希望这能更好地传达问题。谁能帮忙?

编辑 2 我尝试了这个建议的答案:“ORDER BY date DESC, time DESC, markers.name DESC”但它没有用。

order by date, time, name

请注意, block 3 按时间排序。 “e”行和“b”行未组合在一起。

最佳答案

获取 conditions(markers_id, date) 的每个组合的 MAX(time) 值列表,然后将该列表加入到您从当前查询中获取的行集,并使用 MAX(time) 值进行排序:

SELECT
  m.name AS markers_name,
  c.time AS conditions_time,
  c.date AS conditions_date,
  s.name AS station_name
FROM markers m
  INNER JOIN conditions c ON c.markers_id = m.id
  INNER JOIN station s    ON c.station_id = s.id
  INNER JOIN (
    SELECT
      markers_id,
      date,
      MAX(time) AS time
    FROM conditions
    GROUP BY
      markers_id,
      date
  ) mx ON c.markers_id = mx.markers_id AND c.date = mx.date
ORDER BY
  c.date DESC,
  mx.time DESC,
  m.name DESC,
  c.time DESC

关于mysql 查询以获取按日期、时间和名称排序的数据(但不想在每个日期下拆分通用名称),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6845487/

相关文章:

java - 如何在抛出异常后促使应用程序继续运行?

mysql - 将一个表的两列连接到另一个表的同一列

带连接的 SQL 多选

MySQL 连接两个具有相同行的表并替换特定列

带有 'select where x is not null' 的 SQL Server View 需要很长时间才能完成

php - mysql group by only date 并计算有多少结果

php - NOW() 函数在我的网络主机上返回错误的时间戳

mysql - 没有显示输出值

mysql - 汇总指定项目的总和

VS 上的 sql INNER JOIN 表变量。内部连接(选择)开启