【发布时间】:2019-12-13 10:54:20
【问题描述】:
我想获取 n 天前到 2 天前的数据(最早的数据)。
这是我的 SQL 请求:
SELECT CDCATEGORY, DTLOGDATE
FROM ERRORS
我该怎么做?
【问题讨论】:
-
列
DTLOGDATE是什么数据类型? -
我添加了oracle标签。
我想获取 n 天前到 2 天前的数据(最早的数据)。
这是我的 SQL 请求:
SELECT CDCATEGORY, DTLOGDATE
FROM ERRORS
我该怎么做?
【问题讨论】:
DTLOGDATE是什么数据类型?
在 Oracle 中,您可以从 date 中减去天数。
所以假设DTLOGDATE 是date,你可以这样做:
SELECT CDCATEGORY, DTLOGDATE FROM ERRORS WHERE DTLOGDATE > SYSDATE - 2
或者,如果您想要一整天:
SELECT CDCATEGORY, DTLOGDATE FROM ERRORS WHERE DTLOGDATE > TRUNC(SYSDATE) - 2
【讨论】:
试试这个:
SELECT CDCATEGORY, DTLOGDATE
FROM ERRORS where DTLOGDATE DTLOGDATE >= SYSDATE - n and DTLOGDATE <= SYSDATE - 2
【讨论】:
此代码将为您提供数据库(DTLOGDATE)最后日期的最后 2 天数据。
SELECT CDCATEGORY, DTLOGDATE
FROM ERRORS
WHERE DTLOGDATE > (SELECT DATEADD(day, -2, MAX(DTLOGDATE) FROM ERRORS)
【讨论】:
请尝试使用以下代码:
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
【讨论】:
您需要计算最后一次获取数据的时间。
您想要12-dec-2019 00:00:00 之前的数据,这将包括在或之前 11-dec-2019 之前的所有数据。
使用以下查询:
SELECT CDCATEGORY, DTLOGDATE FROM ERRORS WHERE DTLOGDATE < TRUNC(SYSDATE) - 1;
干杯!!
【讨论】:
select trunc(sysdate) - 1 from dual 的结果是什么?