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;
我正在使用这个查询
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;