【问题标题】:How to GROUP BY same value in different rows with condition? (MYSQL)如何根据条件对不同行中的相同值进行 GROUP BY? (MYSQL)
【发布时间】:2020-11-17 06:19:02
【问题描述】:

我有这张桌子:

+-----------+-----------+---------------------+
| id        | member_id | date                |
+-----------+-----------+---------------------+
| 1         |     2     | 2020-07-27 21:53:46 |
| 2         |     1     | 2020-07-27 22:03:58 |
| 3         |     1     | 2020-07-27 22:09:16 |
| 4         |     1     | 2020-07-27 22:11:33 |
| 5         |     2     | 2020-07-27 22:12:21 |
-----------------------------------------------

我想GROUP BY 这样的事情:

+-----------+-----------+---------------------+
| id        | member_id | date                |
+-----------+-----------+---------------------+
| 1         |     2     | 2020-07-27 21:53:46 |
| 2         |     1     | 2020-07-27 22:03:58 |
| 5         |     2     | 2020-07-27 22:12:21 |
-----------------------------------------------

但是当我输入 GROUP BY member_id 时,它只返回两行 (1, 2)

【问题讨论】:

    标签: mysql sql group-by window-functions gaps-and-islands


    【解决方案1】:

    我将此理解为间隙和孤岛问题,您希望在其中显示 member_id 与“上一个”行不同的行。

    这是一种使用窗口函数的方法(在 MySQL 8.0 中可用):lag() 在前一行给出 member_id,然后我们可以将其与当前行的值进行比较:

    select id, member_id, date
    from (
        select t.*, lag(member_id) over(order by date) lag_member_id
        from mytable t
    ) t
    where not lag_member_id <=> member_id 
    order by date
    

    Demo on DB Fiddlde

    编号 |会员编号 |日期 -: | --------: | :----------------- 1 | 2 | 2020-07-27 21:53:46 2 | 1 | 2020-07-27 22:03:58 5 | 2 | 2020-07-27 22:12:21

    【讨论】:

    • 非常感谢!我使用旧版本的 MySQL 编写了一些不同的代码,但它确实有效!比较上一行是个好主意。
    猜你喜欢
    • 2018-11-01
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    相关资源
    最近更新 更多