【问题标题】:SQL Teradata TOP and DISTINCTSQL Teradata TOP 和 DISTINCT
【发布时间】:2021-12-17 00:56:34
【问题描述】:

我正在尝试在 Teradata SQL 中编写嵌套的 TOP + DISTINCT 查询。我的查询如下所示:

SELECT TOP 5
    *
FROM
    (SELECT DISTINCT k_name.KUNDE_NAME1
     FROM DB_DWH_MART_AKM_PLT.VW_F_EVENT f_ev
     INNER JOIN DBX_DWH_SBX_AKM_PRD.TB_KUNDE_EKP_NAME_AKTUELL k_name ON f_ev.AUFTRAGGEBER_EKP = k_name.EKP
     WHERE f_ev.PROCESS_NO = 1075)

我收到一个错误:

预期类似名称或 Unicode 分隔标识符...介于 ) 和 ;"之间。

我不知道我做错了什么。

DISTINCT 查询会自行正确执行。

【问题讨论】:

  • 也许您需要为子查询提供别名,例如... FROM ( SELECT DISTINCT .... ) AS a
  • @KotaMori 你是对的!谢谢!
  • 是否需要派生表(子查询)? (我没用过 Teradata,所以不知道。)
  • @jarlh 不幸的是,Teradata 不允许您使用 DISTINCT TOP...
  • 没有排序依据,结果是不确定的。运行多次,几乎肯定会得到不同的结果。

标签: sql teradata distinct


【解决方案1】:

为什么不使用group by

SELECT TOP 5 k_name.KUNDE_NAME1
FROM DB_DWH_MART_AKM_PLT.VW_F_EVENT f_ev
INNER JOIN DBX_DWH_SBX_AKM_PRD.TB_KUNDE_EKP_NAME_AKTUELL k_name ON f_ev.AUFTRAGGEBER_EKP = k_name.EKP
WHERE f_ev.PROCESS_NO = 1075
GROUP BY k_name.KUNDE_NAME1 --instead of using distinct
ORDER BY k_name.KUNDE_NAME1; --remove or modify as needed

【讨论】:

  • 可能也可以。是否存在运行时差异?
  • DISTINCT 和 GROUP BY 可能会得到相同的计划(优化基于数据人口统计)
猜你喜欢
  • 1970-01-01
  • 2012-10-24
  • 1970-01-01
  • 1970-01-01
  • 2019-12-07
  • 1970-01-01
  • 2014-01-14
  • 2014-08-15
  • 1970-01-01
相关资源
最近更新 更多