数据修复查询

时间:2017-07-15 16:21:36

标签: mysql sql

让我们假设一个如下表格。构建所需的查询包括:

  • 如果有多个 id value type ,则必须将记录删除到只剩下一个记录的位置。
  • 使用最早的 effectiveDate 保留记录,并使用最新的 expirationDate 更新记录并保留以供删除。

输入表格

p.key | id   | value   | type  | effectiveDate  |  expirationDate
------------------------------------------------------------------
 1    | 123  | ABC     | 1D    | 2000-01-01     | 2010-01-01
 2    | 123  | ABC     | 1D    | 1990-01-01     | 2010-01-01
 3    | 123  | ABC     | 1D    | 2010-01-01     | 2020-01-01
 4    | 456  | ABC     | 1D    | 2000-01-01     | 2010-01-01

预期输出

p.key | id   | value   | type  | effectiveDate  |  expirationDate
------------------------------------------------------------------
 2    | 123  | ABC     | 1D    | 1990-01-01     | 2020-01-01
 4    | 456  | ABC     | 1D    | 2000-01-01     | 2010-01-01   

1 个答案:

答案 0 :(得分:0)

这是一个相当简单的聚合。您需要使用group by子句以及min()max()函数。

select
  id
  , value
  , type
  , min(effectiveDate) as effectiveDate
  , max(expirationDate) as expirationDate
from
  my_table
group by
  id
  , value
  , type

注意:我已从您的输出中删除了key列,因为将其放在此处没有意义。