如何仅使用最新日期计算记录

时间:2012-03-25 21:55:04

标签: mysql sql date unique greatest-n-per-group

如何修改此MySQL查询以仅计算来自表格引导的leadID,其中“日期”列包含最新(最年轻)的日期?

SELECT COUNT(leadID) as accepted FROM leads WHERE change like '%OK%'

问题是leadID在表格引导中可以有多个实例。由于一个重复,原始查询结果为“4”。正确的结果是“3”。

日期以这种格式存储:2011-10-26 18:23:52。确定最年轻的日期时,结果应考虑数小时和分钟。

表格引导:

leadID | date                | change
1      | 2011-10-26 18:23:52 | BAD
1      | 2011-10-26 17:00:00 | OK
2      | 2011-10-26 19:23:52 | OK
3      | 2011-10-26 20:23:52 | OK
4      | 2011-10-26 21:23:52 | OK
5      | 2011-10-26 22:23:52 | BAD 

4 个答案:

答案 0 :(得分:0)

您必须根据最新日期决定您的意思:最新的?昨天?今天?

如果是昨天,则将其添加到您的查询子句

  select * from mytable where date >= date_sub(now(), interval 1 day)

答案 1 :(得分:0)

如果您使用的是oracle数据库,则可以使用max()函数从表中提取最新日期,进一步查看表中最新日期: -

SELECT COUNT(leadID) as accepted FROM leads WHERE change like '%OK%'
and date_col = (select max(date_col) from leads)

我假设最新的日期你的平均值是关于表格数据的最新...

更改: - 根据问题的变化和赞扬中提到的.. 我想你想在具有“更改”列值的记录中采用最新日期,例如'%OK%'并且想要计算明显的leadId

请尝试以下查询 -

SELECT COUNT(distinct leadID) as accepted FROM leads WHERE change like '%OK%'
    and date_col = (select max(date_col) from leads WHERE change like '%OK%')

答案 2 :(得分:0)

我认为这就是你要找的东西:

select count(distinct l1.leadId) as accepted from leads l1
left join leads l2
on l1.leadId = l2.leadId and l1.date < l2.date
where l2.date is null and l1.`change` like '%OK%'

答案 3 :(得分:-1)

您可以尝试(如果您的日期是类似于time by time()函数的int)

$sql = "SELECT COUNT(leadID) as accepted FROM leads WHERE change like '%OK%' ORDER BY Date DESC LIMIT 1"

您只会提取最新的条目。

编辑:这应该适用于您的日期格式YYYY-MM-DD hh:mm:ss

编辑2:好的,我没有理解你的问题。 你有一个表领先:leadid日期 您想要计算新设日期的行数。

像另一个指出的那样你可以使用MAX运算符:

SELECT COUNT(distinct leadid)
FROM LEAD AS l,
( SELECT MAX(Date) mdate FROM Lead ) AS MaxDate
WHERE l.date = MaxDate.mdate
AND l.change like '%OK%'