MariaDB Select 明显开启(需要一个表达式(接近开启)
MariaDB Select Distinct ON (An Expression was Expected (Near ON)
我正在尝试在列上使用 Distinct 进行简单查询(因为我仍然想 return table 中的所有其他列)
但是当我尝试使用 ON (Column) 子句时,它一直显示错误
“需要表达式(接近开启)”
我不知道这条消息是什么意思,因为查询的格式似乎正确,这是 MariaDB 而不是 MySQL 的特定内容吗?
MariaDB 版本 10.3.28 这个有用吗?
SELECT DISTINCT ON (No, Branch) *
FROM Table1
ORDER BY No, a DESC;
表 1
| ID | No | Branch | Datetime |
| --------- | ---------- | ------------- | ---------------- |
| 1 | 1 | 1 | 18/10/2021 10:00 |
| 2 | 1 | 1 | 19/10/2021 10:00 |
| 3 | 1 | 2 | 22/10/2021 10:00 |
| 4 | 1 | 2 | 20/10/2021 11:37 |
| 5 | 1 | 1 | 21/10/2021 10:00 |
| 6 | 1 | 1 | 22/10/2021 11:37 |
| 7 | 2 | 1 | 20/10/2021 10:00 |
| 8 | 2 | 1 | 22/10/2021 11:37 |
基本上我想在“No”和“Branch”上使用 Distinct 基本上给我 1 条记录,其中 No 和 Branch 是唯一的并且它使用 MAX(Datetime)
我曾尝试使用 Group by 子句,但这给了我一行与其他行的混合结果。
我想要的结果是:
| ID | No | Branch | Datetime |
| --------- | ---------- | ------------- | ---------------- |
| 6 | 1 | 1 | 22/10/2021 11:37 |
| 3 | 1 | 2 | 22/10/2021 10:00 |
| 8 | 2 | 1 | 22/10/2021 11:37 |
我想显示 table 中的所有列,因为我还将执行 Join 以根据 No 和 Branch
获取名称
尝试:
CREATE TABLE table_tst (
`ID` int(5),
`No` int(5),
`Branch` int(5),
`Datetime` Datetime
);
INSERT INTO table_tst VALUES
(1,1,1,'2021-10-18 10:00:00'),
(2,1,1,'2021-10-19 10:00:00'),
(3,1,2,'2021-10-22 10:00:00'),
(4,1,2,'2021-10-20 11:37:00'),
(5,1,1,'2021-10-21 10:00:00'),
(6,1,1,'2021-10-22 11:37:00'),
(7,2,1,'2021-10-20 10:00:00'),
(8,2,1,'2021-10-22 11:37:00');
select *
from table_tst where (No,Branch,Datetime) in
(
select `No`,`Branch`,MAX(`Datetime`) as max_time
from table_tst
group by `No`,`Branch`
)
order by No ,Branch ASC;
演示:https://www.db-fiddle.com/f/vhqJXYFy52xRtVBc97R1EL/8
datetime
是 mysql
中的保留字:https://dev.mysql.com/doc/refman/8.0/en/keywords.html 它应该在反引号中或者我建议使用其他非保留字
我正在尝试在列上使用 Distinct 进行简单查询(因为我仍然想 return table 中的所有其他列) 但是当我尝试使用 ON (Column) 子句时,它一直显示错误 “需要表达式(接近开启)”
我不知道这条消息是什么意思,因为查询的格式似乎正确,这是 MariaDB 而不是 MySQL 的特定内容吗?
MariaDB 版本 10.3.28 这个有用吗?
SELECT DISTINCT ON (No, Branch) *
FROM Table1
ORDER BY No, a DESC;
表 1
| ID | No | Branch | Datetime |
| --------- | ---------- | ------------- | ---------------- |
| 1 | 1 | 1 | 18/10/2021 10:00 |
| 2 | 1 | 1 | 19/10/2021 10:00 |
| 3 | 1 | 2 | 22/10/2021 10:00 |
| 4 | 1 | 2 | 20/10/2021 11:37 |
| 5 | 1 | 1 | 21/10/2021 10:00 |
| 6 | 1 | 1 | 22/10/2021 11:37 |
| 7 | 2 | 1 | 20/10/2021 10:00 |
| 8 | 2 | 1 | 22/10/2021 11:37 |
基本上我想在“No”和“Branch”上使用 Distinct 基本上给我 1 条记录,其中 No 和 Branch 是唯一的并且它使用 MAX(Datetime)
我曾尝试使用 Group by 子句,但这给了我一行与其他行的混合结果。
我想要的结果是:
| ID | No | Branch | Datetime |
| --------- | ---------- | ------------- | ---------------- |
| 6 | 1 | 1 | 22/10/2021 11:37 |
| 3 | 1 | 2 | 22/10/2021 10:00 |
| 8 | 2 | 1 | 22/10/2021 11:37 |
我想显示 table 中的所有列,因为我还将执行 Join 以根据 No 和 Branch
获取名称尝试:
CREATE TABLE table_tst (
`ID` int(5),
`No` int(5),
`Branch` int(5),
`Datetime` Datetime
);
INSERT INTO table_tst VALUES
(1,1,1,'2021-10-18 10:00:00'),
(2,1,1,'2021-10-19 10:00:00'),
(3,1,2,'2021-10-22 10:00:00'),
(4,1,2,'2021-10-20 11:37:00'),
(5,1,1,'2021-10-21 10:00:00'),
(6,1,1,'2021-10-22 11:37:00'),
(7,2,1,'2021-10-20 10:00:00'),
(8,2,1,'2021-10-22 11:37:00');
select *
from table_tst where (No,Branch,Datetime) in
(
select `No`,`Branch`,MAX(`Datetime`) as max_time
from table_tst
group by `No`,`Branch`
)
order by No ,Branch ASC;
演示:https://www.db-fiddle.com/f/vhqJXYFy52xRtVBc97R1EL/8
datetime
是 mysql
中的保留字:https://dev.mysql.com/doc/refman/8.0/en/keywords.html 它应该在反引号中或者我建议使用其他非保留字