我正在使用左连接来解决每组最大的问题。它适用于在基准列中按日期获取最新值。
SELECT t1.* FROM druckerdaten.druckerdaten AS t1
LEFT OUTER JOIN druckerdaten.druckerdaten AS t2
ON t1.ip = t2.ip AND (t1.datum < t2.datum OR (t1.datum = t2.datum AND t1.nr < t2.nr))
WHERE t2.ip IS NULL ORDER BY t1.ip;
接下来我想在基准列中的特定日期之前获取最新值,但我不知道如何实现这一点。 不是,例如。数据&lt;&#39; 2017-05-22 10:00:00&#39;在WHERE子句中,在ON子句中也可以工作。
以下是一个示例数据集:
----------------------------------------------------
|nr |datum |ip |value |
----------------------------------------------------
|1 |2017-05-01 15:00:00 |192.168.0.1 |a |
|2 |2017-05-01 16:00:00 |192.168.0.2 |b |
|3 |2017-05-01 17:00:00 |192.168.0.1 |c |
|4 |2017-05-02 15:00:00 |192.168.0.2 |d |
|5 |2017-05-02 16:00:00 |192.168.0.2 |e |
----------------------------------------------------
以上查询的结果是:
----------------------------------------------------
|nr |datum |ip |value |
----------------------------------------------------
|3 |2017-05-01 17:00:00 |192.168.0.1 |c |
|5 |2017-05-02 16:00:00 |192.168.0.2 |e |
----------------------------------------------------
现在,使用以下查询将datum列约束在where子句中:
SELECT t1.* FROM druckerdaten.druckerdaten AS t1
LEFT OUTER JOIN druckerdaten.druckerdaten AS t2
ON t1.ip = t2.ip AND (t1.datum < t2.datum OR (t1.datum = t2.datum AND t1.nr < t2.nr))
WHERE t2.ip IS NULL AND datum<'2017-05-02 00:00:00' ORDER BY t1.ip;
这给了我这个结果:
----------------------------------------------------
|nr |datum |ip |value |
----------------------------------------------------
|3 |2017-05-01 17:00:00 |192.168.0.1 |c |
----------------------------------------------------
但它应该给:
----------------------------------------------------
|nr |datum |ip |value |
----------------------------------------------------
|2 |2017-05-01 16:00:00 |192.168.0.2 |b |
|3 |2017-05-01 17:00:00 |192.168.0.1 |c |
----------------------------------------------------
我怎样才能做到这一点?
答案 0 :(得分:0)
是这样吗?
SELECT t1.* FROM druckerdaten AS t1
LEFT OUTER JOIN druckerdaten AS t2
ON t1.ip != t2.ip
WHERE t1.datum < '2017-05-02 00:00:00' AND t2.datum < '2017-05-02 00:00:00'
AND t1.nr >= t2.nr
group by t2.ip
ORDER BY t1.nr ASC;