id,date,source,target,identifier
1,2020-10-10,internal,external,abc-123
2,2020-10-10,internal,internal,xyz-123
3,2020-10-11,external,external,abc-123
4,2020-10-12,external,external,abc-123
同一条记录(abc-123(有三个条目,我想过滤掉最旧和最新的记录。对于所有的记录,如果有重复的,那么我想得到最古老和最新的记录。
我不知道如何构造这样一个查询。任何帮助都将不胜感激。
您可以在此处使用分析函数:
WITH cte AS (
SELECT *, MIN(date) OVER (PARTITION BY identifier) min_date,
MAX(date) OVER (PARTITION BY identifier) max_date
FROM yourTable
)
SELECT id, date, source, target, identifier
FROM cte
WHERE date IN (min_date, max_date);
上面的CTE为每个标识符的最小和最大日期添加了两个新列到表中。然后,外部查询仅限于具有这些最短或最长日期的记录。