我有一个包含日期和表条目的表。我正在使用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行。如果任何特定列值发生更改,获取行的正确方法是什么。
答案 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_count
或error_count
是否已从先前记录更改,其中它通过名为id
的字段获取上一记录我不确定你的桌子里有没有。