【问题标题】:SQL SELECT query that GROUP when 2 values are combined either way当 2 个值以任一方式组合时,SQL SELECT 查询 GROUP
【发布时间】:2013-08-13 16:28:35
【问题描述】:

这些问题开始让我头疼,所以我尝试在这里寻求帮助,因为我找不到类似的问题......我会尽量说清楚。

我有下表:

id / id_sender / id_receiver / date
1  /    1      /      2      / 07/08/2013
2  /    3      /      1      / 08/08/2013
3  /    3      /      1      / 09/08/2013
4  /    1      /      3      / 10/08/2013
5  /    2      /      3      / 11/08/2013
6  /    2      /      1      / 12/08/2013

我尝试执行以下 SQL 查询:

SELECT rows WHERE id_sender or id_receiver = 1

所以在这里我会去掉 ID 5

GROUP them when value are identical either way in id_sender and id_receiver

在这里,1/6 和 2/3/4 将被分组

SELECT the most recent one in each group

这个会分别选择 6 和 4,这是我想要得到的结果

到目前为止有什么:

SELECT * 
FROM table_name 
WHERE id_sender = '1' OR id_receiver = '1' 
ORDER BY date

但是我没有使用高级查询,而且我在分组方面遇到了困难,因为我无法按 ID_sender 和 ID_receiver 分组,因为在这两种方式中我都不会得到预期的分组,而且我没有正确的分组我无法应用 max(date)...

非常感谢您的帮助!

【问题讨论】:

    标签: date select group-by where


    【解决方案1】:

    试试:

    SELECT max_id, min_id, max(date) FROM
    (
        SELECT id, 
        case when id_sender>id_receiver then id_sender else id_receiver end max_id,
        case when id_sender>id_receiver then id_receiver else id_sender end min_id,
        date FROM table_name
    ) g GROUP BY max_id, min_id
    

    我们的想法是始终在 max_id 中拥有最大的一个,在 min_id 中拥有最小的一个,以便您可以将它们分组。

    【讨论】:

      猜你喜欢
      • 2016-06-17
      • 1970-01-01
      • 2016-07-17
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多