如何降低查询线以不更改Teradata SQL的最终结果?

发布于 2025-02-03 19:04:26 字数 1394 浏览 2 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

深海少女心 2025-02-10 19:04:26
CREATE TABLE ABC.SUMMARY AS
(
SELECT
  A.NR,
  A.DATE,
  COUNT(DISTINCT B.ID) TRX_CNT,
  MAX(CASE WHEN B.ID IS NOT NULL THEN 1 ELSE 0 END) TRX_AB
FROM BASE A
INNER JOIN TRX_BASE B
    ON A.NR = B.NR
WHERE B.TRX_DATE BETWEEN ADD_MONTHS(TRUNC(CURRENT_DATE, 'MM'), -6) AND TRUNC(CURRENT_DATE, 
    'MM')-1
GROUP BY A.NR, A.Date
)
WITH DATA PRIMARY INDEX(NR);

剩下的担忧:

  1. 日期可能/可能不是一个保留的词。因此,我尝试避免使用类似的列,并将它们排除在外,以定义base_date之类的日期。
  2. 仍然不确定它应该是内部连接还是向左。但是,由于您不希望查询的性质发生变化,因此内部查询的行为就像内部连接一样。这是因为如果基本中存在记录,而在trx_base中不存在记录,则将通过b.trx_date评估来消除它,因为不包括无效。

我们删除的内容以及为什么:

  1. 在nr上不同...组通过处理
  2. 1 = 1,这没有增加值,也不对数据进行更改。这始终是正确的..
  3. 拼写。如果有人更改代码在第一两个列中添加列,则会断开。
  4. 删除为..在SQL Server中是可选的...
  5. 更改为左JOIN到INNER,因为您对B.Trx_date的限制将消除所有零件的左JON生成的零值:因此,这是一个内在的联接和更改它不会影响结果。
CREATE TABLE ABC.SUMMARY AS
(
SELECT
  A.NR,
  A.DATE,
  COUNT(DISTINCT B.ID) TRX_CNT,
  MAX(CASE WHEN B.ID IS NOT NULL THEN 1 ELSE 0 END) TRX_AB
FROM BASE A
INNER JOIN TRX_BASE B
    ON A.NR = B.NR
WHERE B.TRX_DATE BETWEEN ADD_MONTHS(TRUNC(CURRENT_DATE, 'MM'), -6) AND TRUNC(CURRENT_DATE, 
    'MM')-1
GROUP BY A.NR, A.Date
)
WITH DATA PRIMARY INDEX(NR);

Remaining Concerns:

  1. date may/may not be a reserved word. as such I try and avoid columns like that and alias them out to define what the date is for like Base_Date or something.
  2. still unsure if it should be an inner join or left. but as you don't want the nature of the query to change, Inner makes sense as the current query behaves like an inner join. that is becuase if a record existed in base but not in trx_base, it would be eliminated by the B.TRX_Date evaluation as no nulls would be included.

What we removed and why:

  1. Distinct on NR... the group by handles it
  2. 1=1 this adds no value and makes no changes to data. it's always true..
  3. Group by spelled out. if someone makes a change to code adding a column in the 1st two columns, this will break.
  4. Removed AS.. it's optional in SQL Server...
  5. CHanged left join to inner as your limit on B.TRX_Date will eliminate all the null values the left join generates: so this is an inner join and changing it doesn't impact results.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文