重复项要删除的SQL

时间:2018-06-25 12:54:12

标签: sql plsql db2

我在数据库记录中

enter image description here

我的SQL:

    SELECT
    DISTINCT name, date(mod_wr)
FROM
    test.object_stg
WHERE
    ir = '4552724'
GROUP BY
    name, date(mod_wr)
ORDER BY name

最后一条记录与最后一条记录相同,只是一条。它只有一个不同的日期。 是否可以通过某种方式查询以返回“名称”列中发生更改的所有记录? 对于记录4和5,具有相同的名称,只是日期不同。我希望它只返回4和5的记录,因为没有变化。

2 个答案:

答案 0 :(得分:0)

从样本数据中,您有3个不同的名称。但是,您不能在select语句中使用distinct,因为它适用于列出的每个字段,并且没有日期可以提供完全匹配的内容。

但是,您可以使用group by语句来整理标题。

// MySQL 5.6 Statement
select name, date(mod_wr) from object_stg group by name;
// MSSQL 2017 Statement
select name, max(mod_wr) from object_stg group by name;

两个语句都返回3行,并且仅显示BMW,1.0 GL和1.0 GLS并带有单个日期。

SQL Fiddle

答案 1 :(得分:0)

如果您不想删除重用值的行。例如。您的#2行,可以使用LAG(),然后仅包含其值与前一个值不同的行。例如

select name, date(mod_wr) from
(
    SELECT
        name, mod_wr, lag(name) over(order by mod_wr) as prev_name
    FROM
        test.object_stg
    WHERE
        ir = '4552724'
)
WHERE prev_name IS NULL OR name <> prev_name