【问题标题】:SQL Sorting table based on two interchangeable fields基于两个可互换字段的 SQL 排序表
【发布时间】:2015-03-04 17:01:56
【问题描述】:

我想按进行通信的顺序对具有 3 列(时间、来源、收件人)的表进行排序。如果源和接收者一起交谈,那么它会按时间列出它们。目标是查看按时间排序的相似人之间发生的通信。示例如下:

time|source|recipient

1   paul    amy
2   amy     paul
3   amy     paul
5   paul    jane
8   amy     paul
9   jane    paul
10  paul    amy
11  paul    jane

最终结果会是这样的

1   paul    amy
2   amy     paul
3   amy     paul
8   amy     paul
10  paul    amy
5   paul    jane
9   jane    paul
11  paul    jane

【问题讨论】:

  • 您的示例没有时间字段。你的规则很模糊——你能不能更具体一些,并说明为什么特定的列排在其他列之前。
  • 我认为 OP 想要拓扑排序?

标签: sql postgresql sorting sql-order-by


【解决方案1】:

你的问题有点含糊。我有根据的猜测是你想要这个:

SELECT *
FROM   tbl
ORDER  BY (GREATEST(source, recipient), LEAST(source, recipient), "time";

The manual about GREATEST and LEAST.

【讨论】:

  • 非常感谢 Erwin,这个解决方案正是我所需要的。我得到了双方之间由此产生的通信按相似的来源、收件人和时间正确排序。
猜你喜欢
  • 2013-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-22
  • 2021-06-25
  • 1970-01-01
相关资源
最近更新 更多