在SQL中检查版本化行是否更新

时间:2017-07-19 16:03:18

标签: mysql sql

在我的mysql数据库中,我有一个表,让我们调用状态。该表格有一个creative_id,每当广告素材的状态发生变化时,我们都会记录一个新行,并将旧版本的is_current更改为0,将新版本更改为1。

我想查询状态更改为“已审核”后有多少状态更改超过90天。所以下面的查询是我开始的,但问题是,如果在不到90天的时间内发生了变化,但是在多次更改中,最终结果大于90天。这是我到目前为止的查询:

const arr = [1, 2, 3]
const squares = {
  num: function(arr) {
    return arr.map((x) => {
      return (x * x) + this.add()
    })
  },
  add: () => {
    return 1
  }
}
console.log(squares.num(arr))

示例:

SELECT COUNT(*) FROM creative_status_version csv
INNER JOIN creative_status_version csv2 
ON csv.creative_id = csv2.creative_id
AND DATEDIFF(day, csv2.last_modified_time, csv.last_modified_time) > 90
WHERE csv.audit_status = 'audited'
AND csv.is_current = 0
AND csv2.audit_status = 'rejected'
AND csv2.is_current = 1

因为唯一的结果来自审计 - >其他内容...在90天的时间跨度之后是id = 1的广告素材,结果将是:

|creative_id| audit_status| is_current| last_modified_time |
|1          |audited      | 0         | 1-1-2017           |
|1          |rejecected   | 1         | 5-1-2017           |
|2          |audited      | 0         | 1-1-2017           |
|2          |pending      | 0         | 2-1-2017           |
|2          |rejected     | 1         | 5-1-2017           |
|3          |audited      | 1         | 1-1-2017           |
|4          |rejected     | 1         | 5-1-2017           |

1 个答案:

答案 0 :(得分:0)

我遵循的逻辑是:

  1. 获取所有审核记录
  2. 对于相同的广告素材ID和审核记录,请获取未审核状态且日期大于审核日期的最短日期
  3. 计算时差是否> 90天

    Select count(*) from
        (select csv.creative_id, csv.last_modified_time
        FROM creative_status_version csv
        INNER JOIN creative_status_version csv2 ON csv.creative_id = csv2.creative_id
        WHERE csv.audit_status = 'audited'
        AND csv2.audit_status <> 'audited'
        AND csv2.last_modified_time>csv.last_modified_time
        GROUP BY csv.creative_id, csv.last_modified_time
        HAVING TIMESTAMPDIFF(day, csv.last_modified_time, min(csv2.last_modified_time)) > 90) t
    
  4. 如果你有一个以上的审计记录percreative id,并且你只想计算最新的和非审计的那个之间的差异,那么你需要有一个子查询代替creative_status_version csv返回审核状态的每个广告素材ID的最大日期。