【问题标题】:MySQL count results after MAX timestampMAX 时间戳后的 MySQL 计数结果
【发布时间】:2016-01-06 18:41:12
【问题描述】:

我有两张桌子

mts

  • 身份证
  • customer_id
  • created_at

大多数

  • 身份证
  • customer_id
  • created_at

我想在mts中获取一个条目的最后时间,并在MAX(mts.created_at)之后计算mos的结果。所有都应该是 GROUP BY customer_id。

我有这样一个简单查询的想法,但是这行不通。

SELECT id, created_at, COUNT(id) 
FROM mos
WHERE created_at > (SELECT MAX(created_at) FROM mts) 
GROUP BY customer_id 
LIMIT 10

【问题讨论】:

  • 愿意分享您遇到的错误信息或意外行为吗?
  • 它太慢了,语法没有错误,我得到 504 Gateway Timeout
  • 听起来你需要索引表中的那些列。
  • 好的,这修复了超时。但是结果是空的,是不是查询的原因?
  • 你确定有记录到 mos 中 created_at 大于max(mts.created_at)

标签: mysql group-by max


【解决方案1】:

这个 SQL 语句只会在结果集中给你 1 行(不管怎样)。不属于聚合函数的所有内容都应包含在 GROUP BY 中。

您的 SQL 语句应如下所示:

SELECT id, created_at, COUNT(id) 
FROM mos
WHERE created_at > (SELECT MAX(created_at) FROM mts) 
GROUP BY customer_id, id, created_at
LIMIT 10

【讨论】:

  • SELECT customer_id, MAX(created_at) created_at, COUNT(customer_id) FROM mts WHERE created_at > (SELECT MAX(created_at) FROM mos WHERE customer_id = 2) AND customer_id = 2 GROUP BY customer_id 如果我添加另一个 AND 和 WHERE,则此方法有效,但我希望将其作为列表。
猜你喜欢
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-20
  • 2018-03-12
相关资源
最近更新 更多