【问题标题】:Looking for latest results by using group_by使用 group_by 查找最新结果
【发布时间】:2021-07-08 11:03:01
【问题描述】:

我正在尝试为我的客户创建一个概览页面,并希望显示客户(在过去一年内)使用某种服务(例如窗户清洁或地板清洁)的时间。

我是这样尝试的:

SELECT start, project_id, category_id, MAX(start) 
FROM `time_entries` 
WHERE project_id = '$project_id' AND start > '$oneyearago' 
GROUP BY category_id

project_id = 一种独特的客户 ID

category_id = 1 用于窗户清洁,2 用于地板清洁等等

start = 上次服务启动时的 DATETIME

我想显示最后的服务,但它只显示最旧的服务。我究竟做错了什么?这里有人对我有想法吗?

非常感谢您。

编辑:这是数据库示例

id   project_id category_id      start

---|------------|-----------|-------------------

1  |  1         | 1         |  2019-11-11 09:51:07

2  |  1         | 2         |  2019-11-12 09:51:07

5  |  1         | 3         |  2019-11-13 09:51:07

3  |  1         | 1         |  2020-11-11 09:51:07

4  |  1         | 2         |  2020-11-12 09:51:07

5  |  1         | 3         |  2020-11-13 09:51:07

6  |  1         | 1         |  2021-11-11 09:51:07

7  |  1         | 2         |  2021-11-12 09:51:07

我想看看

类别 1:最后一次约会是 2021 年 11 月 11 日

类别 2:最后一次约会是 2021 年 11 月 12 日

类别 3:最后一次约会是 2020 年 11 月 13 日

【问题讨论】:

  • 请分享创建表和示例数据插入脚本。此外,样本数据的预期输出。尝试使用 GROUP BY start、project_id、category_id
  • 我试图插入一个演示数据库,我希望这可以解决问题:)
  • 我无法重现。请看:sqlize.online/…
  • 你说的很对,是我的错。我呼应了“start”,但不是 Max(start),这非常愚蠢。
  • 感谢您的帮助,这是一个非常愚蠢的错误。非常抱歉!

标签: mysql group-by


【解决方案1】:

我要的是这样的脚本

CREATE TABLE time_entries (id int, project_id int,  category_id int, start datetime);

INSERT INTO time_entries VALUES(1 , 1 , 1 , '2019-11-11 09:51:07'),(2 , 1 , 2 , '2019-11-12 09:51:07'), (5 , 1 , 3 , '2019-11-13 09:51:07'), (3 , 1 , 1 , '2020-11-11 09:51:07'), (4 , 1 , 2 , '2020-11-12 09:51:07'), (5 , 1 , 3 , '2020-11-13 09:51:07'), (6 , 1 , 1 , '2021-11-11 09:51:07'), (7 , 1 , 2 , '2021-11-12 09:51:07');

现在,解决您的问题。您可以在 where 子句中添加日期检查。

SELECT T1.id, T1.start, T1.project_id, T1.category_id, T2.start
FROM time_entries T1
INNER JOIN(
    SELECT  category_id, MAX(start)start
    FROM time_entries 
    WHERE project_id=1
    GROUP BY  category_id
)T2 ON T1.category_id=T2.category_id AND T1.start = T2.Start
ORDER BY T1.category_id

【讨论】:

    【解决方案2】:

    请尝试以下查询

    SELECT project_id, category_id, MAX(start) as last_datetime FROM time_entries WHERE project_id = '$project_id' GROUP BY category_id
    

    【讨论】:

    • 如果我们在 select 语句中添加 ID 字段,那么这将不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 2021-05-18
    • 2016-09-15
    • 2018-07-06
    • 2020-10-08
    • 1970-01-01
    • 2017-03-18
    相关资源
    最近更新 更多