【问题标题】:On MS Access, group by then filter在 MS Access 上,分组然后过滤
【发布时间】:2015-11-19 07:30:43
【问题描述】:

我有一个关于 ms 访问的表,它有 13 列。我想 group byName 然后通过比较列 id 来检查最新的一个,如果最新的行有值,则记录之前的纪录。将对每一列进行比较。

+-----+-----+-------+-------+-------+
| id  |Name |colum1 |colum2 |colum3 |
+-----+-----+-------+-------+-------+
| 1   |a    |x      |       |x      |
+-----+-----+-------+-------+-------+
| 2   |b    |       |y      |y      |
+-----+-----+-------+-------+-------+
| 3   |a    |z      |z      |       |
+-----+-----+-------+-------+-------+
| 4   |a    |m      |       |       |
+-----+-----+-------+-------+-------+

预期输出

+-----+-----+-------+-------+-------+
| id  |Name |colum1 |colum2 |colum3 |
+-----+-----+-------+-------+-------+
| 2   |b    |       |y      |y      |
+-----+-----+-------+-------+-------+
| 4   |a    |m      |z      |x      |
+-----+-----+-------+-------+-------+

【问题讨论】:

  • 您说的是“MS Access”,但您标记了“MySQL”。是哪个?
  • 最好把目前用sql做过的事情分享一下
  • 这是 ms Access,我尝试将其标记为 access,但它认为它是新标签。但无论如何,如果我什至在任何 sql 格式上都有这个想法,我想将它转移到 ms 访问不会那么困难。
  • @ozy 到目前为止,我按照 subin 的建议尝试了自我加入。
  • 我不同意。 MS Access 的 SQL 方言相当有限。最好获得针对 MS Access 量身定制的答案

标签: sql ms-access select


【解决方案1】:

您可以进行自我加入。

SELECT T1.*
FROM
    table_name T1 
INNER JOIN 
    (SELECT `Name`,MAX(`id`) AS ID FROM table_name GROUP BY `Name` ) T2 
 ON T1.`id`= T2.`ID` AND T1.`Name` = T2.`Name`

希望这会有所帮助。

【讨论】:

  • 这可以通过 id 获取最新记录。但我还想检查每一列,如果该列为空或为空,则必须从下一个最新行中获取。在上面的表格中,第 2 列和第 3 列对于 id 第 4 行是空的,因此它从第 3 行取值 z,从第 1 行取值 x。
【解决方案2】:

我不确定它是否可以在 MS Access 中使用。它适用于 SQL Server。即使这样,它也会很慢。

SELECT
    Groups.Name
    ,(
        SELECT TOP(1) T.colum1
        FROM T
        WHERE T.Name = Groups.Name AND T.colum1 <> ''
        ORDER BY T.ID DESC
    ) AS C1
    ,(
        SELECT TOP(1) T.colum2
        FROM T
        WHERE T.Name = Groups.Name AND T.colum2 <> ''
        ORDER BY T.ID DESC
    ) AS C2
    ,(
        SELECT TOP(1) T.colum3
        FROM T
        WHERE T.Name = Groups.Name AND T.colum3 <> ''
        ORDER BY T.ID DESC
    ) AS C3
FROM
    (
        SELECT Name
        FROM T
        GROUP BY Name
    ) AS Groups

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-20
    • 2014-10-23
    • 2017-06-08
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多