阻止Max函数将时间戳用作PL/SQL中日期列的条件的一部分



如果我查询:

select max(date_created) date_created

在PL/SQL(Oracle 11g)中的日期字段上,并且有在同一日期但在不同时间创建的记录,Max()只返回该日期的最新时间。我想做的是忽略时间,并返回与最大日期匹配的所有记录,而不管它们在该列中的相关时间戳如何。这样做的最佳做法是什么?

编辑:我想做的是返回符合我的条件的最近日期的所有记录,而不管当天的时间戳如何。以下是我现在正在做的事情,它只返回最新日期和该日期的时间的记录。

    SELECT r."ID",
    r."DATE_CREATED"
  FROM schema.survey_response r
  JOIN
    (SELECT S.CUSTOMERID ,
      MAX (S.DATE_CREATED) date_created
    FROM schema.SURVEY_RESPONSE s
    WHERE S.CATEGORY IN ('Yellow', 'Blue','Green')
    GROUP BY CUSTOMERID
    ) recs
  ON R.CUSTOMERID    = recs.CUSTOMERID
  AND R.DATE_CREATED = recs.date_created
  WHERE R.CATEGORY  IN ('Yellow', 'Blue','Green')

最终编辑:通过下面的查询使其工作。

SELECT r."ID",
    r."DATE_CREATED"
  FROM schema.survey_response r
  JOIN
    (SELECT S.CUSTOMERID ,
      MAX (trunc(S.DATE_CREATED)) date_created
    FROM schema.SURVEY_RESPONSE s
    WHERE S.CATEGORY IN ('Yellow', 'Blue','Green')
    GROUP BY CUSTOMERID
    ) recs
  ON R.CUSTOMERID    = recs.CUSTOMERID
  AND trunc(R.DATE_CREATED) = recs.date_created
  WHERE R.CATEGORY  IN ('Yellow', 'Blue','Green')

在Oracle中,您可以忽略时间来获取最新日期

SELECT max( trunc( date_created ) ) date_created
  FROM your_table

您可以通过以下几种方式获取具有最新日期的所有行,忽略时间。使用分析函数(首选)

SELECT *
  FROM (SELECT a.*,
               rank() over (order by trunc(date_created) desc) rnk
          FROM your_table a) 
 WHERE rnk = 1

或者更传统但效率较低的

SELECT *
  FROM your_table
 WHERE trunc(date_created) = (SELECT max( trunc(date_created) )
                                FROM your_table)

相关内容

  • 没有找到相关文章

最新更新