访问:根据记录中的最新日期进行分组(嵌套查询)

2024-05-06

下表中的此查询

SELECT ID, 
       Value, 
       As_of 
FROM Table a 
INNER JOIN (
    SELECT ID, 
           MAX(As_of) AS As_of 
    FROM Table 
    GROUP BY ID
) b 
ON a.ID=b.ID 
AND a.As_of = b.As_of

Table:

ID      Value  As_of
1173    156    20090601
1173    173    20081201
1173    307    20080901
1173    305    20080601
127     209    20090301
127     103    20081201
127     113    20080901
127     113    20080601
1271    166    20090201
1271    172    20081201
1271    170    20080901
1271    180    20080601

让它看起来像这样

Result
ID      Value    As_of
1173    156      20090601
127     209      20090301
1271    166      20090201

它获取每个 ID 的 As_of 的 MAX 并返回...(来自另一个Question https://stackoverflow.com/questions/1704260/access-sql-query-find-the-row-with-the-most-recent-date-for-each-distinct-entry在堆栈溢出上)

我有基本上相同的表,但不是作为“物理表”,而是作为查询结果:

Query:

SELECT tblClassificationHistory.inmateID, 
       tblClassificationHistory.classificationID
FROM tblinmate 
INNER JOIN tblClassificationHistory 
ON tblinmate.inmateID = tblClassificationHistory.inmateID
GROUP BY tblClassificationHistory.inmateID, 
         tblClassificationHistory.classificationID,                
         tblClassificationHistory.reclassificationDate
ORDER BY tblClassificationHistory.inmateID;

得到这样的结果:

inmateID    classificationID    reclassificationDate
2              3                       9/22/2015
2              4                       9/13/2015
2              8                       9/8/2015
3              8                       9/13/2015
4              4                       9/15/2015
4              8                       6/16/2015
5              3                       9/15/2015
5              4                       9/16/2015
5              8                       7/7/2015
6              8                       9/14/2015
7              7                       9/13/2015
8              3                       8/4/2015
8              8                       6/1/2015
9              3                       9/15/2015
10              6                       9/13/2015
11              3                       9/13/2015
12              3                       8/3/2015
12              4                       9/9/2015
12              6                       9/13/2015
12              8                       7/6/2015
13              8                       9/13/2015
14              8                       9/13/2015
15              4                       9/13/2015
16              4                       9/13/2015
17              8                       9/14/2015
18              8                       9/14/2015
19              3                       9/15/2015

我想在我的查询中使用“His”查询,但几个小时后我不能......我认为它是一个子查询......但我一生都无法得到正确的语法......

之后的结果:每个犯人 ID 的最后日期的分类

inmateID    classificationID    reclassificationDate
2           3                   9/22/2015
3           8                   9/13/2015
4           4                   9/15/2015
5           4                   9/16/2015
6           8                   9/14/2015
7           7                   9/13/2015
8           3                   8/4/2015
9           3                   9/15/2015
10          6                   9/13/2015
11          3                   9/13/2015
12          6                   9/13/2015
13          8                   9/13/2015
14          8                   9/13/2015
15          4                   9/13/2015
16          4                   9/13/2015
17          8                   9/14/2015
18          8                   9/14/2015
19          3                   9/15/2015

SELECT a.inmateID,
       a.classificationID,
       b.max_date
FROM (
    SELECT tblClassificationHistory.inmateID, 
           tblClassificationHistory.classificationID,                
           tblClassificationHistory.reclassificationDate
    FROM tblinmate
    INNER JOIN tblClassificationHistory
    ON tblinmate.inmateID = tblClassificationHistory.inmateID 
) a
INNER JOIN (
    SELECT tblClassificationHistory.inmateID, 
           MAX(tblClassificationHistory.reclassificationDate) as max_date
    FROM tblinmate
    INNER JOIN tblClassificationHistory
    ON tblinmate.inmateID = tblClassificationHistory.inmateID
    GROUP BY tblClassificationHistory.inmateID  
) b
ON a.inmateID = b.inmateID
AND a.reclassificationDate = b.max_date
ORDER BY a.inmateID;

您可以将其分解为两个子查询(a and b). In b,我们将在表中找到 MAX 日期,不包括classificationID 和仅按inmateID 分组。我们最终会得到一个像这样的表:

+----------+-----------+
| inmateID | max_date  |
+----------+-----------+
| 2        | 9/22/2015 |
| 3        | 9/13/2015 |
| 4        | 9/15/2015 |
| 5        | 9/16/2015 |
| 6        | 9/14/2015 |
| 7        | 9/13/2015 |
| ...      | ...       |
+----------+-----------+

In a,我们将简单地获取未聚合的值,包括这样的分类ID:

+----------+------------------+----------------------+
| inmateID | classificationID | reclassificationDate |
+----------+------------------+----------------------+
| 2        | 3                | 9/22/2015            |
| 2        | 4                | 9/13/2015            |
| 2        | 8                | 9/15/2015            |
| 3        | 8                | 9/16/2015            |
| 4        | 4                | 9/14/2015            |
| 4        | 8                | 9/13/2015            |
| ...      | ...              | ...                  |
+----------+------------------+----------------------+

我们连接两个子查询,查找行a其中 reclassificationDate 等于刚刚计算的 MAX 日期b。然后,我们可以从这些连接的行中获取适当的分类 ID 来构建我们的最终表。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

访问:根据记录中的最新日期进行分组(嵌套查询) 的相关文章

  • SQL Server Like 查询不区分大小写

    Query SELECT from Table 2 WHERE name like Joe Output 1 100 Joe 2 200 JOE 3 300 jOE 4 400 joe 为什么不区分大小写 Problem 查询不区分大小写
  • 从 PL/SQL 调用 shell 脚本,但 shell 以 grid 用户而非 oracle 身份执行

    我正在尝试使用 Runtime getRuntime exec 从 Oracle 数据库内部执行 shell 脚本 在 Red Hat 5 5 上运行的 Oracle 11 2 0 4 EE CREATE OR REPLACE proced
  • 创建日期范围表

    我正在编写一份需要显示每天值的报告 我有查询的开始日期和结束日期 但我希望避免丢失日期 以防表不包含特定日期的值 我正在考虑创建一个基本日期范围表 其中包含开始和结束之间的所有日期 然后将其与数据表左连接以显示每一天的值 我找到了一些适用于
  • ORA-00933 与内部联接和“as”混淆

    我有一个使用以下命令从两个表中获取数据的查询inner join 但我收到错误SQL command not properly ended as 下面有一个星号 select P carrier id O order id O aircra
  • 私人聊天系统MYSQL查询显示发送者/接收者的最后一条消息

    在这里我延伸一下我之前的问题 私人聊天系统MYSQL查询ORDERBY和GROUPBY https stackoverflow com questions 10929366 private chat system mysql query o
  • 如何使用 SQL 通过表示多级订单的 varchar 字段正确排序?

    我不太喜欢数据库 我发现在查询上出现以下问题SQL服务器数据库旧的遗留应用程序的 我声明不幸的是我无法更改数据库结构 字段类型 这非常难看 我有以下情况 SELECT Sottocategoria IdSottocategoria IdCa
  • 使用条件 SQL 统计每月汇总记录

    我有一张桌子 我们就叫他们桌子吧SUMMARYDATA NIP NAME DEPARTMENT STATUSIN STATUSOUT TOTALLOSTTIME A1 ARIA BB 2020 01 21 08 06 23 2020 01
  • 与 OLE 服务器或 ActiveX 控件通信

    MS Access 2010 Win 7 常规形式我没有故意放置任何 ActiveX 或 OLE 东西 甚至不确定它们是什么 但无论如何 每当我在特定形式的代码中放入某些内容时 它都会说 您作为事件属性设置输入的表达式 XXXXX 产生了以
  • Extbase - 从查询中获取创建的sql

    我想从我的typo3 扩展中获取一些数据库表 该扩展基于 extbase 查询总是不返回任何内容 但数据存在 我试过这个 query this gt createQuery query gt statement SELECT FROM my
  • SQLite (Android):使用 ORDER BY 更新查询

    Android SQLite 我想要在 myTable 中的其他行之间插入行在android中使用SQLite 为此 我尝试增加从第 3 行开始的所有行的 id 这样 我就可以在位置 3 处插入新行 myTable 的主键是列 id 表中没
  • MySQL:如何获取每个分组的x个结果数[重复]

    这个问题在这里已经有答案了 可能的重复 mysql 在 GROUP BY 中使用 LIMIT 来获取每组 N 个结果 https stackoverflow com questions 2129693 mysql using limit w
  • 自动删除主键序列中的间隙

    我正在创建一个网页 该网页根据用户操作将数据存储到 MySQL 数据库中 数据库有很多行 行的主键是列 rowID 它只是按顺序对行进行编号 例如 1 2 3 4 用户可以选择删除行 问题是当用户删除最后一行以外的行时 rowID 中有一个
  • C# using 语句、SQL 和 SqlConnection

    使用 using 语句 C SQL 可以吗 private static void CreateCommand string queryString string connectionString using SqlConnection c
  • 没有为 1 个或多个必需参数给出值。更新SQL

    我正在编写一个程序 当用户在列表视图上选择记录时 该程序会更新密码或积分 我收到错误 没有为 1 个或多个必需参数给出值 我不知道如何纠正 我是否遗漏了一些明显的东西 Dim sql As String UPDATE Users SET P
  • 何时在 mysql 中使用 Union [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 对于 Union 您会在什么现实情况下使用它 因为对我来说 对具有不同列用途 含义的两个表中的两个选择查询使用联合是没有意义的 例如
  • 如何将SQL数据加载到Hortonworks中?

    我已在我的电脑中安装了 Hortonworks SandBox 还尝试使用 CSV 文件 并以表结构的方式获取它 这是可以的 Hive Hadoop nw 我想将当前的 SQL 数据库迁移到沙箱 MS SQL 2008 r2 中 我将如何做
  • Snowflake 中的动态 SQL

    当我在雪花中运行动态 SQL 时 遇到以下错误 未完成对 SQL MAIN 的分配 因为值超出了变量的大小限制 它的大小是263 限制为 256 内部存储大小以字节为单位 这是代码 SET v G 1 SET v G1 v G VARCHA
  • postgresql:插入...(选择*...)

    我不确定它是否是标准 SQL INSERT INTO tblA SELECT id time FROM tblB WHERE time gt 1000 我正在寻找的是 如果 tblA 和 tblB 位于不同的数据库服务器中怎么办 Postg
  • 更好地理解 SQL Server 中的架构

    就像标题一样 我还是一个SQLServer菜鸟 当我创建表 Mytable 时 数据库中显示 dbo Mytable 但有人能让我更好地理解模式吗 另外 在 Server 2008 TSQL 一书中 Itzik 说 在你的数据库中 表属于模
  • Java、Oracle 中索引处缺少 IN 或 OUT 参数:: 1 错误

    您好 我使用 Netbeans 8 0 2 和 Oracle 11g Express Edition 在 JSF 2 2 中编写了一个图书馆管理系统 我有几个名为 书籍 借阅者 等的页面 以及数据库中一些名为相同名称的表 我的问题是这样的

随机推荐