首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >内部查询中的最大(日期)

内部查询中的最大(日期)
EN

Stack Overflow用户
提问于 2019-06-11 03:04:38
回答 2查看 50关注 0票数 1

我得到的示例SQL似乎并不能满足我的需求。

大表有400万行,小表有60万行。

/*示例代码:(我是由一位高级分析师提供的) */

代码语言:javascript
复制
SELECT SUM(BigTable.VALUE)
        FROM BigTable INNER JOIN SmallTable
        WHERE BigTable.ID = SmallTable.ID
        AND BigTable.VALUATION_DATE IN 
                (SELECT MAX(VALUATION_DATE)
                FROM BigTable)
       GROUP BY BigTable.ID

/*我的代码:(我在内部查询中放置了一个WHERE ) */

代码语言:javascript
复制
SELECT BigTable.ID, SUM(BigTable.VALUE)
        FROM BigTable INNER JOIN SmallTable
        WHERE BigTable.ID = SmallTable.ID
        AND BigTable.VALUATION_DATE IN 
                (SELECT MAX(VALUATION_DATE)
                FROM BigTable INNER JOIN SmallTable
                    WHERE BigTable.ID = SmallTable.ID)
       GROUP BY BigTable.ID

如果ID xyz在最近日期有三个帐户,值分别为$1、$2、$3,我想返回该日期所有帐户的总和: xyz,$6

EN

回答 2

Stack Overflow用户

发布于 2019-06-11 03:19:07

您应该避免使用where子句,而使用ON子句

代码语言:javascript
复制
SELECT SUM(BigTable.VALUE)
FROM BigTable 
INNER JOIN SmallTable ON  BigTable.ID = SmallTable.ID
AND BigTable.VALUATION_DATE =  (
    SELECT MAX(VALUATION_DATE)
    FROM BigTable)

并且您不应该使用按id分组。

票数 0
EN

Stack Overflow用户

发布于 2019-06-11 03:23:40

使用窗口函数:

代码语言:javascript
复制
SELECT b.ID, b.VALUE
FROM (SELECT b.*,
             ROW_NUMBER() OVER (PARTITION BY b.id ORDER BY b.VALUATION_DATE DESC) as seqnum
      FROM BigTable b
     ) b JOIN
     SmallTable s
     ON b.ID = s.ID
WHERE b.seqnum = 1;

我不认为聚合是必要的。但是,如果同一个id在同一日期有多个值,那么:

代码语言:javascript
复制
SELECT b.ID, SUM(b.VALUE)
FROM (SELECT b.*,
             RANK() OVER (PARTITION BY b.id ORDER BY b.VALUATION_DATE DESC) as seqnum
      FROM BigTable b
     ) b JOIN
     SmallTable s
     ON b.ID = s.ID
WHERE b.seqnum = 1
GROUP BY b.id;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56532141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档