【发布时间】:2019-04-13 14:08:39
【问题描述】:
这是我上一个问题的扩展:SQL is there a way to sort multiple time columns into one while preserving metadata?
我现在正在尝试优化此解决方案,但现在我遇到了第一个时间戳列已排序的情况。使用 UNION 作为解决方案的问题在于,它大大增加了查询大量数据的时间,因为它实际上再次将数据置于无序状态,并且需要在时间戳上再进行一次 ORDER BY。
所以,总结上一个问题: 我有一个 SQL 数据库表,它有四个不同时间的列按第一个时间戳 (a_time) 排序。我希望能够以一种可以将 a、b、c 和 d 时间戳中的每一个合并到一列中的方式对它们进行排序,同时保留 id 和元数据。
id | a_time | b_time | c_time | d_time | metadata1 | metadata2
1 | 5 | 7 | 2 | 4 | a | b
2 | 6 | 1 | 12 | 10 | c | d
3 | 8 | 9 | 3 | 11 | e | f
在上面的例子中,我想要一些结果:
id | time | metadata1 | metadata2
2 | 1 | c | d
1 | 2 | a | b
3 | 3 | e | f
1 | 4 | a | b
1 | 5 | a | b
2 | 6 | c | d
1 | 7 | a | b
3 | 8 | e | f
3 | 9 | e | f
2 | 10 | c | d
3 | 11 | e | f
2 | 12 | c | d
我认为没有其他方法可以做到这一点,并且我可能需要以不同的方式解析查询数据,但我很感激任何对此问题的可能优化解决方案的见解。 em>
【问题讨论】:
-
有一种方法可以在没有工会的情况下做到这一点。如果您可以将表的架构(IOW,create table 语句)添加到您的问题中,我将创建一个 SQLFiddle 来展示另一种方法。
-
另见
CASE ...和GROU PBY id。
标签: mysql sql database sorting optimization