我正在试图弄清楚如何从我的表中提取不同的数据场景进行测试。假设我的表有这三个字段FIELD1, FIELD2, FIELD3
。如果我想在我的数据中找到各种场景,我可以简单地执行此操作
select distinct FIELD1, FIELD2, FIELD3 from <table>
这很有效。问题是我有很多其他领域我也需要数据,但只要它与结果记录相关联,那么数据是什么并不重要。因此,例如,如果上述查询将其作为结果之一返回
FIELD1 FIELD2 FIELD3
----------------------
Y Blue 31
我希望看到其他内容字段(4到10可以说)。现在来自记录号#30或记录#20000(假设那些记录包含那3个返回值),只要所述记录返回所有字段就没关系。
希望这是有道理的,有人可以提供帮助!
答案 0 :(得分:2)
像
这样的东西SELECT field1,
field2,
field3,
field4,
....
field10
FROM( SELECT field1,
field2,
...,
field10,
rowid rid,
min(rowid) OVER (partition by field1, field2, field3) min_rid
FROM your_table_name )
WHERE rid = min_rid
应该有效。如果有一个主键,你可以使用它而不是ROWID
,我只是用它来保证唯一的东西。
对于你的曲线球
SELECT field1,
field2,
field3,
field4,
....
field10
FROM( SELECT field1,
field2,
(CASE WHEN field3 IS NULL
THEN 'NULL'
ELSE field3
END) field3,
...,
field10,
rowid rid,
min(rowid) OVER (partition by field1,
field2,
(CASE WHEN field3 IS NULL
THEN 'NULL'
ELSE field3
END) min_rid
FROM your_table_name )
WHERE rid = min_rid
答案 1 :(得分:0)
试试这个:
select a.*
from tblA a,
(select min(rowid), col_1, col_2 from tblA
group by col_1, col_2) b
where a.rowid=b.rid;