【问题标题】:Change the date for the 1st record of a link in oracle sql更改oracle sql中链接的第一条记录的日期
【发布时间】:2018-01-04 02:23:29
【问题描述】:

我有一个问题,我想将 SALES_DATE 更改为 '01.01.1800' 以获得产品的第一条记录。这意味着我想获取存储在PRODUCT_ID 中的所有唯一产品并检查加载产品的第一个SALES_DATE 并将此SALES_DATE 更改为'01.01.1800'。我相信我可以使用RANK 函数,但我以前没有使用过,可能还有另一个很好的解决方案,我正在尝试为此编写查询。 PRODUCT_ID 值在此列中不是唯一的。

Select PRODUCT_ID,SALES_DATE from SALES_DETAILS

【问题讨论】:

    标签: sql oracle date rank


    【解决方案1】:

    不需要排名,您可以使用相关子查询获得最低日期:

    select *
    from sales_details as sd
    where sales_date <> date '1800-01-01' -- don't update if there's already a row with that date
      and sales_date = -- find the row with the lowest date
          ( select min(sales_date)
            from sales_details as sd2
            where sd.product_id = sd2.product_id
          )
    

    当您检查它是正确的数据时,只需切换到更新:

    【讨论】:

    • 我们如何知道哪些产品的 SALES_DATE 不是“01.01.1800”。因为我只想更新那些。您的查询提供了所有 product_id 但日期也为“01.01.1800”
    • 为什么你的销售数据可以追溯到 18 世纪?
    • 其实这个产品已经失效了,需要在数据库中,但是有一些过期的奇数日期
    • @Andrew:不,不,不,这不是通常的做法,产品信息通常存储在渐变维度中,valid_from/valid_tovalid_to 设置为 infinity 用于活动行,关闭日期用于关闭行。
    • 我把条件设置为 sd.sales_date DATE '1800-01-01''。会不会有问题?
    猜你喜欢
    • 1970-01-01
    • 2013-12-03
    • 2023-03-24
    • 2015-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多