我在数据库记录中
我的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的记录,因为没有变化。
答案 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并带有单个日期。
答案 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