为每个组选择最近的日期,但分组必须在连续的日期进行

z4bn682m  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(333)

如何按一列值对相邻行进行分组,以便只返回这些分组行中最近的一行?
内部数据 travel table

id   name    location    date
--------------------------------------------
1    name    London      2018-09-01 00:00:00
2    name    London      2018-09-02 00:00:00
3    name    NYC         2018-09-03 00:00:00
4    name    London      2018-09-04 00:00:00
5    name    NYC         2018-09-05 00:00:00
6    name    NYC         2018-09-06 00:00:00
7    name    Tokyo       2018-09-07 00:00:00

结果(顺序颠倒)

7    name    Tokyo       2018-09-07 00:00:00
6    name    NYC         2018-09-06 00:00:00
4    name    London      2018-09-04 00:00:00
3    name    NYC         2018-09-03 00:00:00
2    name    London      2018-09-02 00:00:00

摆弄:http://sqlfiddle.com/#!2015年9月20日至33日

70gysomp

70gysomp1#

使用double NOT EXISTS . 简单地说,选择所有行,除了那些在将来存在相同位置而在它们之间不存在不同位置的行。

SELECT *
FROM travel curr
WHERE NOT EXISTS (
    SELECT 1
    FROM travel next
    WHERE next.name = curr.name
    AND next.location = curr.location
    AND next.date > curr.date
    AND NOT EXISTS (
        SELECT 1
        FROM travel inbw
        WHERE inbw.name = curr.name
        AND inbw.location <> curr.location
        AND inbw.date > curr.date
        AND inbw.date < next.date
    )
)
ORDER BY date DESC

修订的sql fiddle

相关问题