【问题标题】:SQL: Group By cause with conditionSQL:带条件的 Group By 子句
【发布时间】:2017-02-15 08:46:29
【问题描述】:

我有一个如下所示的 Access 表:

ID      Country       Application Date
--------------------------------
12      France        12/01/2016
12      Germany       01/01/2017
13      Germany       01/02/2017
14      Spain         23/01/2017
14      Germany       01/02/2017
15      
16      Greece        01/01/2017

我希望每个 ID 都出现一次,并具有最近的申请日期。

我试过了:

SELECT ID, Country, Max(Application Date)
FROM MyTable
GROUP BY ID

但是 Access 拒绝了这个查询,并希望我在 group by 子句中添加国家,这不能工作。 此外,我还希望能够获取没有国家和申请日期的行(如 ID=15 的行)。

预期的结果是:

ID      Country       Application Date
--------------------------------
12      Germany       01/01/2017
13      Germany       01/02/2017
14      Germany       01/02/2017
15      
16      Greece        01/01/2017

【问题讨论】:

  • 有了这些样本数据,预期的结果是什么?
  • 一般 GROUP BY 规则说:“如果指定了 GROUP BY 子句,则 SELECT 列表中的每个列引用必须标识一个分组列或作为集合函数的参数。”

标签: sql ms-access


【解决方案1】:

我想这就是你想要的

select t1.* from MyTable as t1 inner join
(
SELECT ID, Max(Application Date) as Application Date
FROM MyTable
GROUP BY ID
) as t2 on t1.Id=t2.ID and t1.Application Date=t2.Application Date

【讨论】:

  • 非常感谢,这对您有很大帮助!我意识到我的表的行数不正确,只是注意到有一些重复的数据:(相同的 ID,相同的国家,相同的申请日期)。感谢您的帮助!
【解决方案2】:

它适用于您的输入数据并返回正确的输出数据。请尝试一下)

SELECT d.id, MyTable.country, d.datemax
FROM (SELECT ID as id, Max(AppDate) as datemax
FROM MyTable
GROUP BY ID) as d 
,MyTable
WHERE d.id = MyTable.id and datemax = MyTable.appdate
OR (datemax is null and country is null)

【讨论】:

    猜你喜欢
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    • 2022-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多