MySQL - 在不同的有序行上选择不同的检测更改

时间:2015-07-21 08:57:28

标签: mysql sql distinct

我有一张这样的表:

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

我需要通过datetime列T得到一个有序的结果,但我需要查询检测并避免A,B和C列中重复的行。所有这些都按ID排序和分隔。

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

结果应该是这样的:

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

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

尝试此查询:

{{1}}

答案 1 :(得分:1)

此查询提供预期结果(已测试):

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

答案 2 :(得分:0)

尝试此查询:

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

编辑:将T添加到分组