比如说表结构中,有id,和 同步时间 sync_time两个关键列;每次同步都会记录一条日志;当我们需要查询某ID的最早同步时间和其他表关联时,如何搞定?
1.我们通过order by或者group by都不能实现过滤为一条
sql: select id,sync_time from sync_log order by sync_time limit 0,1;
select id,sync_time from sync_log group by id,sync_time;等
2.最终解决的sql为:
SELECT
id,
sync_time
FROM
(
SELECT
id,
sync_time,
row_number () OVER (
PARTITION BY id
ORDER BY
sync_time
) AS row_flg
FROM
SYNC_TASK
)
WHERE row_flg = 1
这样通过 over 函数获取到重复数据,只留row_flg为1 的值即可;
如果需要最后一次同步时间,order by sync_time desc即可;
然后拿此结果在和其他表关联进行复杂查询。。。