【问题标题】:SQL - Get only data from 2 days agoSQL - 仅获取 2 天前的数据
【发布时间】:2019-12-13 10:54:20
【问题描述】:

我想获取 n 天前到 2 天前的数据(最早的数据)。

这是我的 SQL 请求:

SELECT CDCATEGORY, DTLOGDATE
FROM ERRORS

我该怎么做?

【问题讨论】:

  • DTLOGDATE是什么数据类型?
  • 我添加了oracle标签。

标签: sql oracle


【解决方案1】:

在 Oracle 中,您可以从 date 中减去天数。

所以假设DTLOGDATEdate,你可以这样做:

SELECT CDCATEGORY, DTLOGDATE FROM ERRORS WHERE DTLOGDATE > SYSDATE - 2

或者,如果您想要一整天:

SELECT CDCATEGORY, DTLOGDATE FROM ERRORS WHERE DTLOGDATE > TRUNC(SYSDATE) - 2

【讨论】:

  • 我有一个问题,我们是 12 月 13 日。你的命令给了我 12 月 12 日至 13 日的所有数据。我想要的是包括 12 月 11 日之前的所有数据。如果我尝试将“>”更改为“
  • @ClementRos:你想要 12 月 11 日 00:00 的数据,对吗?
  • 我想要数据到 12 月 11 日
  • @ClementRos:直到还是来自
  • 直到请 :)
【解决方案2】:

试试这个:

SELECT CDCATEGORY, DTLOGDATE
FROM ERRORS where DTLOGDATE DTLOGDATE >= SYSDATE - n and DTLOGDATE <= SYSDATE - 2

【讨论】:

    【解决方案3】:

    此代码将为您提供数据库(DTLOGDATE)最后日期的最后 2 天数据。

    SELECT CDCATEGORY,  DTLOGDATE
    FROM ERRORS
    WHERE DTLOGDATE > (SELECT DATEADD(day, -2, MAX(DTLOGDATE) FROM ERRORS)
    

    【讨论】:

      【解决方案4】:

      请尝试使用以下代码:

      DECLARE @ERRORS TABLE (CDCATEGORY NVARCHAR(100),DTLOGDATE DATE)
      DECLARE @StartDate DATE = GETUTCDATE() - 10, -- Your 'n' days
              @EndDate   DATE = GETUTCDATE() - 02
      
      INSERT INTO @ERRORS
      VALUES
      ('A','2019-12-01'),
      ('B','2019-12-05'),
      ('Z','2019-12-06'),
      ('R','2019-12-07'),
      ('Y','2019-12-10'),
      ('A','2019-12-11'),
      ('G','2019-12-12'),
      ('C','2019-12-13')
      
      SELECT
          CDCATEGORY, 
          DTLOGDATE
      FROM
          @ERRORS
      WHERE 
          DTLOGDATE BETWEEN @StartDate AND @EndDate
      

      【讨论】:

      • 谢谢,但我不知道@StartDate
      • 如果创建存储过程,可以将'@n_day'作为参数传递。您的“@n_day”可以在存储过程中使用。喜欢:StartDate DATE = GETUTCDATE() - @n_day
      【解决方案5】:

      您需要计算最后一次获取数据的时间。

      您想要12-dec-2019 00:00:00 之前的数据,这将包括在或之前 11-dec-2019 之前的所有数据。

      使用以下查询:

      SELECT CDCATEGORY, DTLOGDATE FROM ERRORS WHERE DTLOGDATE < TRUNC(SYSDATE) - 1;
      

      干杯!!

      【讨论】:

      • 嗨,很奇怪,因为根据你的命令,我在 12 月 1 日之前只有结果。我不明白为什么
      • 其实没想到!!你的数据库中select trunc(sysdate) - 1 from dual 的结果是什么?
      • 2019-12-12 00:00:00.0
      猜你喜欢
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 2021-03-24
      • 1970-01-01
      • 2021-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多