【问题标题】:Return latest date for results in query返回查询结果的最新日期
【发布时间】:2014-06-21 01:35:49
【问题描述】:

我正在尝试获取一个总帐表并在另外两个表之间连接,然后在语句中显示每个总帐的最新条目,但我不知道该尝试什么。

SELECT
    GLACCOUNT.GLACODE, 
    GLACCOUNT.GLADESC, 
    GLACCOUNT.GLATYPE, 
    GLACCOUNT.GLAACTIVE, 
    GLENTHDR.GLEHENTDATE, 
    GLENTTRL.GLETREM, 
    GLENTHDR.GLEHUSER, 
    GLENTHDR.GLEHPP
FROM GLACCOUNT 
INNER JOIN GLENTTRL 
    ON GLACCOUNT.GLACODE = GLENTTRL.GLETCODE 
INNER JOIN GLENTHDR 
    ON GLENTTRL.GLETXACT = GLENTHDR.GLEHXACT

现在我想要结合 GLACCOUNT.GLACODE 并为每个 (GLACODE) 显示最新的 GLENTHDR.GLEHPP 条目。做一些研究,我认为我可以做一个 WHERE 语句,但我不知道如何结合。我需要对结果进行子查询吗?很抱歉在这里成为菜鸟。我敢肯定这是一个简单的。谢谢。

【问题讨论】:

  • 你用的是什么数据库?

标签: sql join where having


【解决方案1】:

我不确定您使用的是哪个数据库,但下面的查询语法是标准 SQL。这个想法是通过GLETXACT查询每个GLENTHDR记录分组的最新日期。然后让外部查询加入它。

SELECT
    GLACCOUNT.GLACODE, 
    GLACCOUNT.GLADESC, 
    GLACCOUNT.GLATYPE, 
    GLACCOUNT.GLAACTIVE, 
    GLENTHDR.GLEHENTDATE, 
    GLENTTRL.GLETREM, 
    GLENTHDR.GLEHUSER, 
    GLENTHDR.GLEHPP
FROM GLACCOUNT 
INNER JOIN GLENTTRL 
    ON GLACCOUNT.GLACODE = GLENTTRL.GLETCODE 
INNER JOIN (
    SELECT
        GLETXACT,
        GLEHUSER,
        GLEHPP,
        MAX(GLEHENDATE) AS GLEHENDATE
    FROM GLENTHDR
    GROUP BY GLETXACT, GLEHUSER, GLEHPP
) GLENTHDR 
    ON GLENTTRL.GLETXACT = GLENTHDR.GLEHXACT

【讨论】:

    【解决方案2】:

    您确实需要一个子查询来查找每个辅助表的最后一个事务。查看下面最内部的子查询,它还不错。最内部的子查询只是获取辅助表的每个 GLETCODE 的最后一个 ID(不确定您的真实姓名)。我称它为 MAXmytablename。然后它连接回辅助表以获取最后一行。然后它将 GLACCOUNT.GLETCODE 连接到最后一行的 GLETCODE。

    SELECT     GLACCOUNT.GLACODE, 
    GLACCOUNT.GLADESC, 
    GLACCOUNT.GLATYPE, 
    GLACCOUNT.GLAACTIVE, 
    GLENTHDR.GLEHENTDATE, 
    GLENTTRL.GLETREM, 
    GLENTHDR.GLEHUSER, 
    GLENTHDR.GLEHPP
    FROM GLACCOUNT 
    INNER JOIN (SELECT GLENTTRL.GLETCODE,
                GLENTTRL.GLETREM
                FROM GLENTTRL
                 JOIN (SELECT MAX(ID) MAXID,
                    GLETCODE
                    FROM GLENTTRL
                    GROUP BY GLETCODE) AS MAXGLENTTRL
            ON MAXGLENTTRL.MAXID = GLENTTRL.ID) AS GLENTTRL
    ON GLACCOUNT.GLETCODE = GLENTTRL.GLETCODE
    INNER JOIN (SELECT GLENTHDR.GLETCODE,
                    GLENTHDR.GLEHUSER, 
                    GLENTHDR.GLEHPP,
                    GLENTHDR.GLEHENTDATE
                    FROM GLENTHDR
                    JOIN (SELECT MAX(ID) MAXID,
                        GLETCODE
                        FROM GLENTHDR
                        GROUP BY GLETCODE) AS MAXGLENTHDR
                    ON MAXGLENTHDR.MAXID = GLENTHDR.ID) AS GLENTHDR
    ON GLACCOUNT.GLETCODE = GLENTHDR.GLETCODE
    

    【讨论】:

      猜你喜欢
      • 2011-05-25
      • 2021-05-21
      • 2019-10-19
      • 2021-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多