[英]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)
);
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.