这是我经常遇到的一个问题,我很想知道如何解决这个问题。
我正在编写一个足够简单的报告/查询,但是在运行时,会返回具有重复值的行。我知道返回这些“重复项”的原因是因为有一列在两行之间具有不同的数据,但是说我只想看到返回具有特定 ID 号的 1 行。选择哪一行并不重要,只是每个 ID_NUM 只返回 1 行。
返回数据的简化示例:
ID_NUM | PHASE | DATE | NOTE
----------------------------------
30329 | Phase1 | 1-1-20 | example note
30329 | null | 1-1-20 | example note
21928 | Phase1 | 1-2-20 | another note
21928 | Phase1 | 4-3-19 | another note
我试过的:
- SELECT DISTINCT - 返回与简单 SELECT 相同的结果
- SELECT DISTINCT MIN(ID_NUM) - 仍然返回重复的 ID_NUM 值,我猜是因为它们是相同的,没有最小值。
- GROUP BY ID_NUM - 要求我在 group by 中包含每一列,并且仍然返回相同的结果。
实际示例:虽然上面是一个简化示例,但下面显示了我的实际查询。case.casenum 是我只需要为每个唯一值返回 1 行的字段/列。这是一个sybase 数据库,它遵循mssql/t-sql 语法。
SELECT cases.casenum,
cases.case_date_5,
cases.class,
user_tab6_data.trial_phase,
user_tab6_data.maximizer_completed,
user_tab6_data.maximizer_scheduled,
cases.case_title,
cases.open_status, cases.case_date_9,
user_tab6_data.maximizer_necessary,
cases.staff_1,
cases.staff_8,
user_tab6_data.county_of_suit,
insurance.how_settled,
insurance.policy_type,
insurance.date_settled,
user_tab6_data.value_set_date,
user_tab6_data.status_note,
user_tab6_data.minimum_value
FROM cases, user_tab6_data, insurance
WHERE (cases.casenum = user_tab6_data.case_id)
AND (cases.casenum = insurance.case_num)
AND (cases.class like 'A' OR cases.class like 'B' OR cases.class like 'C' OR cases.class like 'D' OR cases.class like 'E' OR cases.class like 'F' OR cases.class like 'G' OR cases.class like 'H' OR cases.class like 'I' OR user_tab6_data.trial_phase like 'Phase 1' OR cases.case_date_5 is not NULL )
AND insurance.policy_type = 'Liability'
AND cases.open_status = 'O'
AND cases.case_date_9 is not NULL
尝试使用ROW_NUMBER窗口函数,如下例所示: