该查询有效,但是我想看看是否有更多的优化/更短的方法来获得相同的结果。 我想从3个表TABLE_01,TABLE_02,TABLE_03的联合中检索具有最大日期的所有数据。 无论哪个表具有最新的bill_date,我都希望检索该bill_date的行。 对于相同的PID和bill_date,它将总是返回多个行。

SELECT T1.PID, T1.BILL_DATE, T2.COL3, T2.COL4, T2.COL5
FROM
    (
     SELECT T.PID, MAX(T.BILL_DATE)
     FROM 
       ( 
         SELECT DISTINCT PID, BILL_DATE, COL3, COL4, COL5
         FROM TABLE_0501
         GROUP BY 1,2,3,4,5
         UNION ALL
         SELECT DISTINCT PID, BILL_DATE, COL3, COL4, COL5
         FROM TABLE_0502
         GROUP BY 1,2,3,4,5
         UNION ALL
         SELECT DISTINCT PID, BILL_DATE, COL3, COL4, COL5
         FROM TABLE_0503
         GROUP BY 1,2,3,4,5
        ) T
     GROUP BY 1  
    ) T1

INNER JOIN

    ( SELECT DISTINCT PID, BILL_DATE, COL3, COL4, COL5
      FROM TABLE_0501
      GROUP BY 1,2,3,4,5
      UNION ALL
      SELECT DISTINCT PID, BILL_DATE, COL3, COL4, COL5
      FROM TABLE_0501
      GROUP BY 1,2,3,4,5
      UNION ALL
      SELECT DISTINCT PID, BILL_DATE, COL3, COL4, COL5
      FROM TABLE_0501
      GROUP BY 1,2,3,4,5
    ) T2

ON T1.PID = T2.PID
AND T1.BILL_DATE = T2.BILL_DATE

#1楼 票数:0 已采纳

是的,这里有一个QUALIFY子句很方便。

SELECT * FROM 
( 
    SELECT PID, BILL_DATE, COL3, COL4, COL5
    FROM TABLE_0501
    GROUP BY 1,2,3,4,5
    UNION ALL
    SELECT PID, BILL_DATE, COL3, COL4, COL5
    FROM TABLE_0502
    GROUP BY 1,2,3,4,5
    UNION ALL
    SELECT PID, BILL_DATE, COL3, COL4, COL5
    FROM TABLE_0503
    GROUP BY 1,2,3,4,5
) T
QUALIFY RANK() OVER (PARTITION BY PID ORDER BY BILL_DATE DESC) = 1;

在每组PID中,将从BILL_DATE到最低的行分配一个等级。 QUALIFY ... = 1将选择排名最高的BILL_DATE。

  ask by angelcake translate from so

未解决问题?本站智能推荐:

4回复

通过在条件下查找最大日期来与另一个表联接

编辑:我正在使用teradata sql助手我有两个表TABLE_1和TABLE_2 表格1: 表_2: 我想离开TABLE_1和TABLE_2,以便始终获取TABLE_2中最近日期的记录。 最终结果应如下所示: 如何指定加入条件?
2回复

加入两个表时如何仅返回最近的日期

我有一个医生 NPI # 的列表,我需要将其转换为内部客户 ID #,然后使用这些客户 ID 来检查呼叫中心代表上次联系他们的时间。 为此,我使用了两个表, NPI_Conversion ( cid , npi ) 和Call_Center ( call_center_cid , customer_
2回复

获取SQL表中每个用户ID的最后一个元素

我想弄清楚如何在 SQL 中执行以下操作(我专门在 Teradata 中工作)。 给定下表中的用户 ID、交易日期和购买的物品,我试图找出每个用户 ID 如何获得最后购买的物品,例如: 所以在这种情况下查询将返回: 等等。 我尝试在 Teradata 中使用 Partition By 或 Windo
2回复

SQL:根据最短日期获取值

在以下示例中,我想根据最短日期获取状态值: 输出将是 编辑:我正在这样做,但似乎不起作用
5回复

如何基于最大日期获取多行

我在SQL Server中有一张表SalePrices,数据如下: 我想要的是创建一个仅显示我上次修改的ProductID和Price的视图。 所以我想要的与下面的结果相同:
2回复

SQL获取最大日期

我需要为每个客户提供每种产品的最后价格。 我对 SQL 不是很擅长,我不明白我该怎么做。 数据 : 我想要的是 : 可以通过 SQL 请求获得这些数据吗?
2回复

根据列值获取最大日期

假设我有一个名为image_play的下表,并具有以下行和列 从该表中,我想为每个image_category选择MAX日期。 所以结果是 我已经尝试过对每个类别进行查询,如下所示: 但这不起作用。 请帮助我..非常感谢。
3回复

从三个日期列中获取最大日期

我需要通过ID来获取三列的最大日期:创建日期,更新日期和交易日期。 以下是我引用的数据的简化形式,并不代表我正在使用的实际数据。 检索每个ID的这些列的最大值后,我应该得到: 到目前为止,我已经尝试了以下方法的变体: 但这以以下错误结束: 我还尝试了以下各种变化: 但是然后