【问题标题】:Finding MIN value with other conditions Teradata在其他条件下查找 MIN 值 Teradata
【发布时间】:2020-11-24 08:47:56
【问题描述】:

我正在使用 Teradata SQL。

我有一张包含这些列的表格 orgprice - 原价 sprice - 售价 saledate - 销售日期

我需要在数据库中找到该商品的销售价格不等于该商品的原始价格的最早销售日期*

我尝试像这样使用 MIN:

SELECT MIN(saledate)
FROM trnsact
WHERE orgprice <> sprice

但这只是总体上返回了 min saledate 值,where 子句被忽略了。

我该怎么做?

【问题讨论】:

  • 请显示示例数据和预期结果-
  • 你的查询应该做你想做的事。

标签: sql teradata teradatasql


【解决方案1】:

你可以试试下面的-

SELECT col1,col2,MIN(case when orgprice <> sprice then saledate end)
FROM trnsact 
group by col1, col2

【讨论】:

  • 这也返回了相同的结果。您能否告诉我如何使用此查询选择更多列,以便检查它是否实际上返回了不同的条目。
  • @AnantSinha,我已经编辑了选择列的答案 - 你可以检查
【解决方案2】:

大概,您的表格也有一个“项目”列来定义项目。如果是这样,你只需要一个GROUP BY 子句:

SELECT item, MIN(saledate)
FROM trnsact
WHERE orgprice <> sprice
GROUP BY item;

【讨论】:

    【解决方案3】:

    排名的简单任务:

    SELECT *
    FROM trnsact
    WHERE orgprice <> sprice
    QUALIFY
       ROW_NUMBER()
       OVER (-- PARTITION BY item -- ?
             ORDER BY saledate) = 1
    

    对于单行,您也可以使用 TOP:

    SELECT TOP 1 *
    FROM trnsact
    WHERE orgprice <> sprice
    ORDER BY saledate
    

    【讨论】:

    • 感谢您的回复,但我认为必须有另一个答案。 1.查询需要几分钟才能执行,我不得不取消它。我正在解决一项学术任务,但他们没有给我们一个需要这么长时间的问题 2. 为什么有 PARTITION BY 子句?我只需要一排
    • 我不知道这是针对每个项目还是全局,这就是我写PARTITION BY item -- ?的原因。只需删除该部分。
    猜你喜欢
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 2012-02-24
    • 2017-02-27
    • 2016-09-17
    • 2011-04-22
    相关资源
    最近更新 更多