我有一个这样的数据块:
RW | PK A B C D
============================
1 | 1 aa 123 x 99
2 | 2 aa 234 v 98
3 | 3 bb 321 z 11
4 | 4 bb 210 w 91
5 | 5 cc 456 y 55
我怎样才能抓住每一组中的第一项(A栏ID),就像这样?
RW | A B C D
=======================
1 | aa 123 x 99
2 | bb 321 z 11
3 | cc 456 y 55
我可以GROUP BY
或使用DISTINCT
,但这与我正在查看的内容效率非常低,而运行直接列表的时间不到100毫秒。上述两个选项也可能在A列中产生多个项目实例,因为相关值可能不同。
换句话说,
SELECT MYTABLE.A, MYTABLE.D, MYTABLE.D, MYTABLE.D
FROM MYTABLE
非常快(不到一秒钟),而
SELECT MYTABLE.A, MYTABLE.D, MYTABLE.D, MYTABLE.D
FROM MYTABLE
GROUP BY MYTABLE.A, MYTABLE.D, MYTABLE.D, MYTABLE.D
和
SELECT DISTINCT MYTABLE.A, MYTABLE.D, MYTABLE.D, MYTABLE.D
FROM MYTABLE
需要更长的时间(分钟,但我没有让它完成)。
我不需要汇总功能(COUNT
,SUM
等),只需一个列表,每个项目一次。 A列中每个值的出现次数各不相同,因此我不能只抓住每个 x 行。
为什么我不运行列表并使用Excel或类似的东西进行排序?我正在查看要返回的几百万条记录,而我无法处理许多记录使用我熟悉的任何软件。
答案 0 :(得分:4)
听起来你想要像
这样的东西SELECT pk,
a,
b,
c,
d
FROM( SELECT pk,
a,
b,
c,
d,
row_number() over (partition by a order by pk asc) rnk
FROM your_table )
WHERE rnk = 1
答案 1 :(得分:0)
试试这个..
select * from table where rowid in (select min(rowid) from table group by a);