MySQL 使用 MAX(datetime) 并想要 return 一个额外的列

MySQL using MAX(datetime) and wanting to return an additional column

我正在使用这个查询

SELECT id, MAX(datetime) AS most_recent_sign_event 
FROM ATTENDANCE 
WHERE id = 2 
GROUP BY id;

其中return

[{"ID":2,"MOST_RECENT_SIGN_EVENT":"2021-08-29T15:17:44.000Z"}]

但我还想 return 列 'type',我目前不知道该怎么做。我尝试的所有操作都会导致动态 SQL 错误。

SELECT id, type, MAX(datetime) AS most_recent_sign_event 
FROM ATTENDANCE 
WHERE id = 2 
GROUP BY id;

SELECT id AND type, MAX(datetime) AS most_recent_sign_event 
FROM ATTENDANCE 
WHERE id = 2 
GROUP BY id;

等等

感谢您的帮助!

因为您没有向我们展示 table 布局,我假设 type 实际上是 ATTENDANCE table 中的一列,而您是不问我们如何 return 列的数据类型,或类似的东西。

您的问题可能就这么简单:

在 SQL 中,当您使用 GROUP BY 语句时,结果中的每一列都需要是

  • 调用聚合函数(例如MAX()
  • group-by 子句中引用的列
  • 引用前两个之一的表达式。 (允许有一些其他细微差别,但这是一般规则。)

因此您可能只需要这样做:

SELECT id, type, MAX(datetime) AS most_recent_sign_event 
FROM ATTENDANCE 
WHERE id = 2 
GROUP BY id, type;

我假设您想要最近 datetime 的类型。如果是这样,您可以使用:

select a.*
from attendance a
where id = 2
order by datetime desc
limit 1;

在 Firebird 中,您将使用:

select first 1 a.*
from attendance a
where id = 2
order by datetime desc;