【问题标题】:Identify and select row if entry appears for first time in column based on criteria? (SQL)如果条目第一次出现在基于标准的列中,识别并选择行? (SQL)
【发布时间】:2020-12-27 05:54:17
【问题描述】:

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

我想提取 新名称 2020 年 9 月 1 日之后发生的交易(这是该名称第一次购买饮料,名称列中从未出现过该名称2020 年 9 月 1 日之前)。

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

Sample output

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

【问题讨论】:

  • 啊,好球!抱歉,我做得很快,错过了添加他 - 现在更新帖子

标签: sql vba ms-access subquery where-clause


【解决方案1】:

您可以使用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

【讨论】:

  • 努力让它在 VBA 中与 ADOBD 一起工作,但会让你保持更新
【解决方案2】:

试试

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)

【讨论】:

  • 试试这个,会及时通知您
猜你喜欢
  • 1970-01-01
  • 2018-07-20
  • 1970-01-01
  • 1970-01-01
  • 2015-06-23
  • 1970-01-01
  • 2011-03-09
  • 2019-12-18
  • 2021-08-26
相关资源
最近更新 更多