如果条目首次出现在基于条件的列中,则识别并 select 行? (SQL)

Identify and select row if entry appears for first time in column based on criteria? (SQL)

我正在使用 VBA 和 ADODB.Connection 从 Access 数据库中提取数据。如果特定列中的条目首次出现,我想 select 来自数据库的数据。这最好通过示例来解释,所以这是我在 Excel 中快速制作的示例 table,我们假设 table 称为“DrinkTable”

我想提取一个新名字在 2020 年 9 月 1 日之后发生的交易(这是那个名字第一次购买饮料,名字从来没有在 2020 年 9 月 1 日之前出现在名称栏中)。

我能够编写一个 SQL 语句,使用以下方法提取 2020 年 9 月 1 日之后的所有条目:"SELECT [Name], [Drink], [Cost], [Date] FROM [DrinkTable] WHERE [Date] >= #"9/1/2020#" ORDER BY [ID] DESC; 但这并没有给出我正在尝试的结果。我正在寻找的正确输出是:

Sample output

如果 [Name] 列中的条目未出现在“2020 年 9 月 1 日”之前,有人可以帮助我改进我的 SQL 语句以仅提取数据吗?

您可以使用 not exists 过滤掉 Name 在拆分日期之前出现的行:

SELECT [Name], [Drink], [Cost], [Date] 
FROM [DrinkTable] d 
WHERE 
    [Date] >= #"9/1/2020#" 
    AND NOT EXISTS (
        SELECT 1
        FROM [DrinkTable] d1
        WERE d1.[Date] < #"9/1/2020#" AND d1.[Name] = d.[Name]
    )
ORDER BY [ID] DESC

尝试

SELECT d1.[Name], [Drink], [Cost], [Date] FROM [DrinkTable] AS d1
LEFT JOIN  (SELECT [Name] FROM [DrinkTable] WHERE [Date] < #9/1/2020# ) as d2
ON d1.name = d2.name
WHERE ISNULL(d2.name)