【问题标题】:SQL is there a way to sort multiple time columns into one while preserving metadata?SQL有没有办法在保留元数据的同时将多个时间列排序为一个?
【发布时间】:2019-03-29 15:44:25
【问题描述】:

我有一个 SQL 数据库表,它有四个不同时间的列。我希望能够以一种可以将 a、b、c 和 d 时间戳中的每一个合并到一列中的方式对它们进行排序,同时保留 id 和元数据。

id | a_time | b_time | c_time | d_time | metadata1 | metadata2
1  | 8      | 7      | 2      | 4      | a         | b
2  | 6      | 1      | 12     | 10     | c         | d
3  | 5      | 9      | 3      | 11     | e         | f

在上面的例子中,我想要一些结果:

【问题讨论】:

  • 执行三重 UNION ALL。

标签: mysql sql database sorting select


【解决方案1】:

您可以在不同时间的多个查询之间union

(SELECT id, a_time AS time, metadata1, metadata2
 FROM   mytable)
UNION
(SELECT id, b_time AS time, metadata1, metadata2
 FROM   mytable)
UNION
(SELECT id, c_time AS time, metadata1, metadata2
 FROM   mytable)
UNION
(SELECT id, d_time AS time, metadata1, metadata2
 FROM   mytable)
ORDER BY time

【讨论】:

  • “要使用 ORDER BY 或 LIMIT 子句对整个 UNION 结果进行排序或限制,请将各个 SELECT 语句括起来并将 ORDER BY 或 LIMIT 放在最后一个之后。”参考:dev.mysql.com/doc/refman/8.0/en/union.html
  • 另外,我们真的不应该建议在列号上使用 Order by 的解决方案。它容易出错。
【解决方案2】:

您正在寻找unpivot您的数据。 MySQL 对此没有太多内置支持,但 ANSI 方法是使用 UNION:

SELECT id, a_time AS time, metadata1, metadata2 FROM yourTable
UNION ALL
SELECT id, b_time, metadata1, metadata2 FROM yourTable
UNION ALL
SELECT id, c_time, metadata1, metadata2 FROM yourTable
UNION ALL
SELECT id, d_time, metadata1, metadata2 FROM yourTable
ORDER BY time;

Demo

【讨论】:

  • “要使用 ORDER BY 或 LIMIT 子句对整个 UNION 结果进行排序或限制,请将各个 SELECT 语句括起来并将 ORDER BY 或 LIMIT 放在最后一个之后。”参考:dev.mysql.com/doc/refman/8.0/en/union.html
  • @MadhurBhaiya 您的引用是指对较大联合查询的 子查询 进行排序。这与订购整个联合查询无关,我的回答就是这样做。
  • @MadhurBhaiya A statement without parentheses is equivalent to one parenthesized as just shown. ...我猜你忘了阅读本文的其余部分 :-)
  • 嗯 :-| +1,但我更喜欢更清晰的解决方案(括号有助于读者理解意图)
  • 我同意可读性。这里的大问题是 1) 我写的对 MySQL 有效,2) 我写的对 ANSI SQL 有效吗?我不记得必须按照您在 any 其他数据库上的建议包装子查询。所以,我宁愿保持原样。
猜你喜欢
  • 2019-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-10
  • 2020-12-04
  • 2023-02-02
  • 2021-10-11
  • 2017-08-06
相关资源
最近更新 更多