繁体   English   中英

可以从可能具有相同值但被翻转的两行中按最高日期时间分组的MYSQL查询

[英]MYSQL query that can group by the highest datetime from two rows that might have the same value but flip flopped

我有一个无法更改架构的MYSQL 5.x数据库,只读访问权限:

SELECT * FROM table;

--------------------+------------+------------+---------
stamp               | src        | dst        | data      
--------------------+------------+------------+---------
2017-12-06 11:08:39 | 2055551234 | 2059999999 | somedata
2017-12-04 16:04:14 | 2059999999 | 2055551234 | somedata
2017-12-04 14:28:21 | 2055551234 | 2059999999 | somedata
2017-12-04 14:26:24 | 8004441111 | 2562428766 | somedata
2017-12-04 14:06:22 | 2562428766 | 8004441111 | somedata
2017-12-04 13:15:52 | 8004441111 | 2562428766 | somedata
+---------------------+------------+------------+-------

我需要为两个数字集服务的所有行,例如2055551234和2055551234,每个行都可以是SRC或DST。 我需要最新行。

我需要同时包含2055551234和2055551234但在SRC或DST列中的行。 值可以在任一列中,因此是我的问题。

每个匹配的SRC,DST集都有多行,我需要每组中具有最新日期时间的行。

当我决定尝试使用MD5(SRC + DST)创建一个哈希值(也等于MD5(DST + SRC))时,我以为它不明智,但结果却不可靠。

可以有1到数千行具有匹配集的行组。

我需要能够限制结果,因此由于每个组中的未知行,仅迭代客户端将无法工作。

我不能存储任何程序,任何迭代工作都必须在客户端完成。

根据以上数据,我想:

--------------------+------------+------------+---------
stamp               | src        | dst        | data      
--------------------+------------+------------+---------
2017-12-06 11:08:39 | 2055551234 | 2059999999 | somedata
2017-12-04 14:26:24 | 8004441111 | 2562428766 | somedata
+---------------------+------------+------------+-------

思考?

嗯,现在我想我明白了。 您不是在寻找两个特定的数字。 您正在寻找具有相同数字对的行组,无论顺序如何。 因此获得的价值和群体越来越小。

select *
from mytable
where (least(src, dst), greatest(src, dst), stamp) in
(
  select least(src, dst), greatest(src, dst), max(stamp)
  from mytable
  group by least(src, dst), greatest(src, dst)
);

SQL提琴: http ://sqlfiddle.com/#!9/ 5bed58/1

SELECT *
FROM mytbl AS t1
WHERE stamp IN (
    SELECT MAX(stamp) AS maxStamp
    FROM (
        SELECT *, CONCAT(GREATEST(src, dst), '.', LEAST(src, dst)) AS gbval 
        FROM `mytbl` AS t2
    ) AS t3
    GROUP BY t3.gbval
    HAVING maxStamp = t1.stamp
)

这样行吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM