我曾尝试使用以下查询,但无法检索列status_id
的不同值。
select distinct status_id, schedule_id, cassay_id, time_of_day,
days, notify_to_addresses, active FROM ordertest
上述查询的目的是过滤表以获取列“status_id
”的唯一值,同时需要获取表中存在的所有列的值。因此,我的最终表将包含status_id
的不同值及其相应的其他值。
答案 0 :(得分:0)
此查询将返回唯一的status_id,但前提是这些status_id和其他每个字段的组合也是唯一的。您可以选择唯一的status_id,但如果每个status_id有多个组合,则无法返回其他字段的所有值。
[编辑]
如果您只希望每个状态的第一条记录:
select
status_id, schedule_id, cassay_id, time_of_day, days, notify_to_addresses, active
from
(select
row_number() over (partition by status_id order by 1) as number,
status_id, schedule_id, cassay_id, time_of_day, days, notify_to_addresses, active
FROM ordertest)
where
number = 1
而不是row_number
,dense_rank
和rank
也用于不同类型的编号,但在这种情况下,您确实需要一行,而row_number就足够了。< / p>
不确定order by
是强制性的。如果没有,你可以把它留下来。如果是,则可以指定虚拟值或指定要用作“第一行”的特定字段。例如,加速order by schedule_id
以返回每个status_id的最低schedule_id。
答案 1 :(得分:0)
WITH DISTINCT_STATUS
AS
(
-- this one will query distinct status id values
select DISTINCT status_id FROM ordertest
)
-- this query will give extra information in that rows.
select distinct T.status_id, T.schedule_id, T.cassay_id, T.time_of_day,
T.days, T.notify_to_addresses, T.active
FROM ordertest T
INNER JOIN
DISTINCT_STATUS DS
ON DS.status_id = T.status_id
答案 2 :(得分:-2)
DISTINCT
适用于每一行,其他字段对于所有不同的status_id
都不相同,因此您无法使用DISTINCT。
使用GROUP BY
,并使用群组功能(MAX,MIN,WM_CONCAT
您需要什么)用于其他列。
或者subqueries
为每列使用primary key
。