【问题标题】:how to count records with newest date only如何仅计算具有最新日期的记录
【发布时间】:2012-04-09 12:04:42
【问题描述】:

如何修改此 MySQL 查询以仅计算“日期”列包含最新(最年轻)日期的表线索中的线索 ID?

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

问题是leadID 可以在表leads 中有多个实例。原来的查询结果是“4”,因为有一个重复。正确的结果是“3”。

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

表格线索:

线索ID |日期 |改变 1 | 2011-10-26 18:23:52 |坏的 1 | 2011-10-26 17:00:00 |好的 2 | 2011-10-26 19:23:52 |好的 3 | 2011-10-26 20:23:52 |好的 4 | 2011-10-26 21:23:52 |好的 5 | 2011-10-26 22:23:52 |坏的

【问题讨论】:

  • 请同时提供示例数据.. 以及所需的结果.. 如果可能,请提供您尝试过的内容和所有内容(如果有)。
  • 这个条件在改变列like '%OK%'你想要同时选择计数...????

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


【解决方案1】:

我想这就是你要找的东西:

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%'

【讨论】:

  • 我和你一样我不懂-1
  • 我不知道是谁投了这个-1。您的查询结果显示“0”。您没有最大部分的查询 [and date = (select max(date) from Leads)] 显示 3,这是正确的。但我们不知道查询计算了两个条目中的哪一个。
  • @user1291842:你确定你有 3 条准确的小时、分钟和秒的记录吗?那些记录必须是youngestgreatestchange like '%OK%' 还是必须是整个表的greatest
  • 所有日期都有小时/分钟/秒。查看刚刚添加到问题中的示例数据。
【解决方案2】:

你必须确定你所说的最新日期是什么意思:单最新?昨天?今天?

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

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

【讨论】:

  • “最新日期”是指一组日期中最年轻的日期。它不一定表示“今天”或“昨天”。 “最新日期”可能是 3 年前的日期,因为该组中的其他日期是 4 岁和 5 岁。
  • 然后使用拥有 max(getdate()) 日期。在 mysql 手册中查找 HAVING。
【解决方案3】:

如果您使用的是 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%')

【讨论】:

  • 感谢建议:原来的查询结果是“4”,因为有一个重复。正确的结果是“3”。您的查询结果显示“0”。
  • @user1291842 请提供所用三列的数据..你可以用这个更新你的问题..
  • 根据您的示例最新日期,确定为更改列值 2011-10-26 21:23:52 只有一条记录,这就是为什么我的选择查询仅给出 1 作为计数结果。
  • 我们需要统计所有“ok”的实例。如果有重复的 ID,我们只查看日期最年轻的 ID。如果状态为“ok”,我们计算 ID,否则不计算。
  • @user1291842 请在示例中解释您如何获得 3 作为计数。正如我在之前的评论中所问的那样,最新的日期是 2011-10-26 21:23:52 (现在有时间 HHMISS 如果我们必须根据最年轻的日期进行计数,那么计数将只有 1,并且 OK 作为更改列值..
【解决方案4】:

您可以尝试(如果您的日期是 int,例如按 time() 函数返回)

$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 date 您想计算新设置日期的行数。

就像另一个人指出的那样,您可以使用 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%'

【讨论】:

    猜你喜欢
    • 2012-03-08
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    • 2018-06-24
    • 2020-08-03
    • 2022-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多