'How do I "append" a column with a value from a table in SQL?

Context

I have a SQL table with the following structure:

# 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 |
+------------+------------+

I would like a query that returns all people in ColumnA from N days ago (call it 5), along with the max date in ColumnB in the table. For example:

# 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)

This query is being executed via Panda's read_sql(), so I can't do something like the following (must be one SELECT statement):

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
);

Additionally, ColumnB doesn't include all days so I can't do something like this:

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
);

The Question

How would I write such a query? Is there some way I can "append" the MAX(ColumnB) via a JOIN or something like that?



Solution 1:[1]

A little more 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
);

Solution 2:[2]

I hope I got your question right:

SELECT 
    ColumnA,
    max(ColumnB) as ColumnB
FROM
    TableName
WHERE
    ColumnB >= NOW() - INTERVAL 5 DAYS;

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Ze'ev Ben-Tsvi