我如何 "append" 具有来自 SQL 中的 table 值的列?
How do I "append" a column with a value from a table in SQL?
上下文
我有一个 SQL table 具有以下结构:
# TableName
+------------+------------+
| ColumnA | ColumnB |
+------------+------------+
| Person A | 2022-03-01 |
| Person B | 2022-03-01 |
| Person C | 2022-03-01 |
| ... | ... |
| Person AAA | 2022-04-12 |
| Person BBB | 2022-04-12 |
| Person CCC | 2022-04-12 |
+------------+------------+
我想查询 N 天前 returns ColumnA
中的所有人(称之为 5),
以及 table 中 ColumnB
中的最大日期。例如:
# TableName
+------------+------------+
| ColumnA | ColumnB |
+------------+------------+
| Person D | 2022-04-15 | # This record's value for ColumnB = 2022-04-10
| Person E | 2022-04-15 | # This record's value for ColumnB = 2022-04-10
| Person F | 2022-04-15 | # This record's value for ColumnB = 2022-04-10
| Person G | 2022-04-15 | # This record's value for ColumnB = 2022-04-10
+------------+------------+
The Catch(es)
这个查询是通过Panda's read_sql()
执行的,所以我不能做类似下面的事情(必须是一个SELECT
语句):
SET @max_date = (SELECT MAX(ColumnB) FROM TableName);
SELECT
ColumnA,
ColumnB,
@max_date
FROM TableName
WHERE ColumnB = (
SELECT
DISTINCT
ColumnB
FROM TableName
ORDER BY ColumnB DESC
LIMIT 1
OFFSET 4
);
此外,ColumnB
不包括 所有 天,所以我不能这样做:
SELECT
ColumnA,
DATE_ADD(ColumnB, INTERVAL 4 DAYS) as Blah
FROM TableName
WHERE ColumnB = (
SELECT
DISTINCT
ColumnB
FROM TableName
ORDER BY ColumnB DESC
LIMIT 1
OFFSET 4
);
问题
我将如何编写这样的查询?有什么方法可以通过 JOIN
或类似的东西“附加” MAX(ColumnB)
吗?
希望我答对了你的问题:
SELECT
ColumnA,
max(ColumnB) as ColumnB
FROM
TableName
WHERE
ColumnB >= NOW() - INTERVAL 5 DAYS;
多一点complex/explicit
SELECT
a.*,
b.MaxColumnB
FROM TableName a
JOIN (SELECT MAX(ColumnB) As MaxColumnB FROM TableName) b ON 1 = 1
WHERE a.ColumnB = (
SELECT
DISTINCT
ColumnB
FROM TableName
ORDER BY ColumnB DESC
LIMIT 1
OFFSET 4
);
上下文
我有一个 SQL table 具有以下结构:
# TableName
+------------+------------+
| ColumnA | ColumnB |
+------------+------------+
| Person A | 2022-03-01 |
| Person B | 2022-03-01 |
| Person C | 2022-03-01 |
| ... | ... |
| Person AAA | 2022-04-12 |
| Person BBB | 2022-04-12 |
| Person CCC | 2022-04-12 |
+------------+------------+
我想查询 N 天前 returns ColumnA
中的所有人(称之为 5),
以及 table 中 ColumnB
中的最大日期。例如:
# TableName
+------------+------------+
| ColumnA | ColumnB |
+------------+------------+
| Person D | 2022-04-15 | # This record's value for ColumnB = 2022-04-10
| Person E | 2022-04-15 | # This record's value for ColumnB = 2022-04-10
| Person F | 2022-04-15 | # This record's value for ColumnB = 2022-04-10
| Person G | 2022-04-15 | # This record's value for ColumnB = 2022-04-10
+------------+------------+
The Catch(es)
这个查询是通过Panda's read_sql()
执行的,所以我不能做类似下面的事情(必须是一个SELECT
语句):
SET @max_date = (SELECT MAX(ColumnB) FROM TableName);
SELECT
ColumnA,
ColumnB,
@max_date
FROM TableName
WHERE ColumnB = (
SELECT
DISTINCT
ColumnB
FROM TableName
ORDER BY ColumnB DESC
LIMIT 1
OFFSET 4
);
此外,ColumnB
不包括 所有 天,所以我不能这样做:
SELECT
ColumnA,
DATE_ADD(ColumnB, INTERVAL 4 DAYS) as Blah
FROM TableName
WHERE ColumnB = (
SELECT
DISTINCT
ColumnB
FROM TableName
ORDER BY ColumnB DESC
LIMIT 1
OFFSET 4
);
问题
我将如何编写这样的查询?有什么方法可以通过 JOIN
或类似的东西“附加” MAX(ColumnB)
吗?
希望我答对了你的问题:
SELECT
ColumnA,
max(ColumnB) as ColumnB
FROM
TableName
WHERE
ColumnB >= NOW() - INTERVAL 5 DAYS;
多一点complex/explicit
SELECT
a.*,
b.MaxColumnB
FROM TableName a
JOIN (SELECT MAX(ColumnB) As MaxColumnB FROM TableName) b ON 1 = 1
WHERE a.ColumnB = (
SELECT
DISTINCT
ColumnB
FROM TableName
ORDER BY ColumnB DESC
LIMIT 1
OFFSET 4
);