我有一个选择给我这个结果:
- ID | System | Type1 | NID | Name_ | Type2__ | Date
- 24 | AA-Tool | PRIV | 816 | Name1 | IMPLICIT | 17.12.2014
- 24 | AA-Tool | PRIV | 816 | Name1 | EXPLICIT | 19.12.2014
- 24 | AA-Tool | PRIV | 816 | Name1 | EXPLICIT | 20.12.2014
- 25 | BB-Tool | PRIV | 817 | Name2 | EXPLICIT | 20.12.2014
- 25 | BB-Tool | PRIV | 817 | Name2 | EXPLICIT | 21.12.2014
因此,ID,System,Type1,NID和Name应该是不同的,Type2和Date应该是按日期的最后一个条目。 这应该是结果:
- 24 | AA-Tool | PRIV | 816 | Name1 | EXPLICIT | 20.12.2014
- 25 | BB-Tool | PRIV | 817 | Name2 | EXPLICIT | 21.12.2014
我希望这是可以理解的:)
谢谢, 迈克尔
答案 0 :(得分:3)
另一种方法可能是:
SELECT t.*
FROM(SELECT t.*,
ROW_NUMBER() OVER (PARTITION BY id, system, type1, nid, name
ORDER BY date DESC) AS rn
FROM tabelA t
)
WHERE rn = 1
也许它会帮助你。
答案 1 :(得分:1)
试试这个:
SELECT a.ID, a.System, a.Type1, a.NID, a.Name_, a.Type2__, a.Date
FROM tableA a
INNER JOIN (SELECT a.ID, a.System, a.Type1, a.NID, a.Name_, MAX(a.Date) Date
FROM tableA a
GROUP BY a.ID, a.System, a.Type1, a.NID, a.Name_
) b ON a.ID = b.ID AND a.System = b.System AND
a.Type1 = b.Type1 AND a.NID = b.NID AND
a.Name_ = b.Name_ AND a.Date = b.Date;
答案 2 :(得分:1)
SELECT DISTINCT *
FROM ( SELECT id,
system,
type_id,
nid,
name_,
type2__,
date,
RANK() OVER (PARTITION BY id, system, type1, nid ORDER BY date DESC) AS reverse_date_rank
FROM sometable )
WHERE reverse_date_rank = 1;
只有在特定日期可以获得多个相同的name_ / type2__条目时才需要外部子查询中的DISTINCT
,因为它们将返回相等的reverse_date_rank。