MySQL - Select 对不同有序行的不同检测变化

MySQL - Select distinct detecting changes on different ordered rows

我有一个 table 这样的:

T              A    B    C   ID
2015-07-19     a    b    c   1
2015-07-16     a    y    z   2
2015-07-21     a    b    c   1
2015-07-17     a    y    c   2
2015-07-18     a    y    c   1
2015-07-20     a    b    c   1
2015-07-17     a    y    c   1
2015-07-19     a    b    c   2
2015-07-16     a    y    z   1
2015-07-20     a    b    c   2
2015-07-15     a    y    z   1
2015-07-22     x    b    c   1
2015-07-21     a    b    c   2
2015-07-18     a    y    c   2
2015-07-15     a    y    z   2
2015-07-22     a    y    c   2
2015-07-14     x    b    c   1

我需要按日期时间列 T 获取排序结果,但我需要查询检测并避免 A、B 和 C 列中的重复行。所有这些都按 ID 排序和分隔。

它可能是一个存储过程。重要的是要快,因为这是一个巨大的日志 table。有数百万行。

结果应该是这样的:

T              A    B    C   ID
2015-07-22     x    b    c   1
2015-07-19     a    b    c   1
2015-07-17     a    y    c   1
2015-07-15     a    y    z   1
2015-07-14     x    b    c   1
2015-07-22     a    y    c   2
2015-07-19     a    b    c   2
2015-07-17     a    y    c   2
2015-07-15     a    y    z   2

有什么想法吗?

试试这个查询:

SELECT * FROM table GROUP BY A,B,C,T ORDER BY ID, T

编辑:将 T 添加到分组依据

试试这个查询:

SELECT max(t),a,b,c,id FROM table GROUP BY A,B,C,id ORDER BY ID, max(T)

此查询给出了预期结果(已测试):

SELECT t1.* FROM mytable t1 
LEFT  JOIN mytable t2 ON t1.t = t2.t + INTERVAL 1 DAY AND t1.A = t2.A AND t1.B = t2.B AND t1.C = t2.C AND t1.ID = t2.ID
WHERE t2.T IS NULL
ORDER BY t1.ID, t1.T DESC