考虑下表:
primaryKey id activity template creator created
1 1 3 5 x 2011-10-13
2 2 4 2 y 2011-10-15
3 2 4 7 z 2011-10-24
4 2 4 7 u 2011-10-29
从这里开始,我想检索具有id
,activity
和template
唯一组合的记录。如果存在两个或更多这些字段的唯一组合,我想采用它们中的第一个。
作为上表数据的示例,我需要的输出是
primaryKey id activity template creator created
1 1 3 5 x 2011-10-13
2 2 4 2 y 2011-10-15
3 2 4 7 z 2011-10-24
(因为记录3和4具有相同的组合,我只想记录3,因为它是第一次出现)
我可以使用单个SQL语句执行此操作吗?
答案 0 :(得分:6)
SELECT primarykey, id, activity, template, creator, created FROM (
SELECT *, row_number() OVER (partition BY id, activity, template ORDER BY created) as rn FROM table
) a
WHERE rn = 1
答案 1 :(得分:0)
这适用于MS SQL Server。
更新了,因为我犯了一个小错误!
SELECT DISTINCT
ROW_NUMBER() OVER (ORDER BY
id
, activity
, template
, creator
, created ) PrimaryKey
, id
, activity
, template
, creator
, created
FROM
[TABLE_NAME]
GROUP BY
id
, activity
, template
, creator
, created
答案 2 :(得分:0)
我认为这应该有效 -
SELECT *
FROM TABLE
WHERE
primaryKey in
(
SELECT min(primarkyKey) from TABLE
group by id, activity, template
)
这里,首先通过执行group by获取内部查询中的必需列。然后使用每个不同记录的主键min来获取外部查询中的所有列。