我的sql语句,如果任何特定列值已从上一个条目更改,则获取行

时间:2015-05-14 09:41:10

标签: mysql sql

我有一个包含日期和表条目的表。我正在使用My sql数据库。

Table employees

updatedDate               req_count     error_count
14-03-2014 10:20:39           1             0 
15-03-2014 11:10:00           1             0 
15-03-2014  12:10:00          1             1 
15-03-2014  16:12:00          1             1 
16-03-2014  12:09:00          2             10

如果之前的条目有任何变化,我想获取条目。 例如,sql查询应仅返回req_count和error_count

的已更改条目
updatedDate               req_count     error_count
14-03-2014 10:20:39           1             0 
15-03-2014  12:10:00          1             1 
16-03-2014  12:09:00          2             10

我正在使用

SELECT updateDate,req_count,error_count FROM employees WHERE empId=10
    AND req_count > 0 OR error_count > 0

这将返回我所有5行,其中我只想要3行。如果任何特定列值发生更改,获取行的正确方法是什么。

2 个答案:

答案 0 :(得分:2)

我的建议。获取每位员工的上一个更新日期。然后加入表格以获取上一条记录,以便进行比较。以下是获取上一个更新日期的一种方法:

select e.*,
       (select max(e2.updatedDate)
        from employees e2
        where e2.empId = e.empId and e2.updatedDate < e.updatedDate
      ) as prev_updatedDate
from employees;

然后完整的查询是:

select e.*
from (select e.*,
             (select max(e2.updatedDate)
              from employees e2
              where e2.empId = e.empId and e2.updatedDate < e.updatedDate
            ) as prev_updatedDate
      from employees
     ) e left join
     employees prev_e
     on prev_e.empId = e.empId and prev_e.updatedDate = e.prev_updatedDate
where (prev_e.empId is null) or
      (prev_e.req_count <> e.req_count or prev_e.error_count <> e.error_count);

答案 1 :(得分:1)

你可以试试这个

SELECT a.*
FROM employees AS a
WHERE 
empId=10
AND
(
    (
        a.req_count <> (
            SELECT
                b.req_count
            FROM
                employees AS b
            WHERE
                a.id > b.id
            ORDER BY
                b.id DESC
            LIMIT 1
        )
    )
    OR (
        a.error_count <> (
            SELECT
                b.error_count
            FROM
                employees AS b
            WHERE
                a.id > b.id
            ORDER BY
                b.id DESC
            LIMIT 1
        )
    )
)

查询在记录上运行,并且对于每个记录检查req_counterror_count是否已从先前记录更改,其中它通过名为id的字段获取上一记录我不确定你的桌子里有没有。