【问题标题】:SQL Query > sysdate <Sysdate + 1 yearSQL 查询 > sysdate <Sysdate + 1 年
【发布时间】:2016-12-02 18:54:54
【问题描述】:

我正在尝试编写一个查询来查找最大到期日期,但我注意到当我这样做时,如果我有一个到期日期,比如 2016 年 12 月 30 日,并且对于同一部分,我没有得到任何结果还有一个截止日期为 2099 年 1 月 1 日(如果没有填写任何内容,这是默认日期)。下面是我的查询,我该如何重写 expire_date 查询以获得正确的日期。

SELECT 
 Part,
 price,
 effective_date,
 expiration_date
FROM a.Table 
 WHERE Part IN ('&Part') 
 AND PRICE  IN ('somewere') 
 AND expiration_date IN (SELECT 
                          MAX(expiration_date) 
                          FROM table  
                          WHERE expiration_date > SYSDATE 
                          AND  part IN ('&Part)  
                          AND PRICE IN (Somewere)) 
 AND to_date(effective_date) IN (SELECT 
                                  MAX(EFFECTIVE_DATE) FROM b.table  
                                  WHERE expiration_date > SYSDATE 
                                  AND  Part IN ('&Part)  
                                  AND price  IN (somewere) 
                                  AND EFFECTIVE_DATE < SYSDATE + 1)

【问题讨论】:

  • 每个表格的样本数据以及所需的结果会有所帮助。
  • 添加更多信息,包括样本和预期输出!
  • 对不起,我忘了拉出那个内部连接,我不需要那个。样本数据如下: Apples 7.95 1-Dec-16 30-Dec-16 Apples 7.95 1-Nov-16 30-Nov-16 Apples 7.95 30-Dec-16 01-Jan-2099 我正在寻找它给我这对于结果 Apples 7.95 1-Dec-16 30-Dec-16

标签: sql sysdate


【解决方案1】:

我会使用 ROW_NUMBER。 https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions137.htm

这里是查询:

SELECT
    part
    ,price
    ,effective_date
    ,expieration_date
FROM (
    SELECT
        part
        ,price
        ,effective_date
        ,expieration_date
        ,ROW_NUMBER() OVER (PARTITION BY part ORDER BY expieration_date DESC) AS "row"
    FROM @tbl
    WHERE effective_date < SYSDATE + 1
    ) tbl
WHERE "row" = 1

这是我用来填充 @tbl 的内容。

DECLARE @tbl TABLE (
part NVARCHAR(MAX)
,price FLOAT
,effective_date DATETIME2(3)
,expieration_date DATETIME2(3)
)

INSERT @tbl (part, PRICE, EFFECTIVE_DATE, EXPIERATION_DATE)
VALUES ('Apples',7.95,'2016-12-01','2016-12-30')
    ,('Apples',7.95,'2016-11-01','2016-11-30')
    ,('Apples',7.95,'2016-12-30','2099-01-01')

【讨论】:

  • 我在 ROW_NUM 行收到“未找到来自关键字”
  • 我在 oracle sql developer 中运行我的查询
  • 抱歉,Oracle SQL Developer 在声明列名时需要“”。更新了查询。只要你用你的表替换@tbl,其他一切都应该工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-21
  • 1970-01-01
  • 1970-01-01
  • 2022-12-05
相关资源
最近更新 更多