如何编写 SQL 语句在两个 dates/times 之间过滤,日期和时间在单独的列中
How to write a SQL statement which filters between two dates/times, with the date and time in separate columns
我有一个 Informix 数据库(除了执行 SELECT 语句外我无法控制它)它包含以下列:
Date | Time | Column1 | Column2 | Column3
日期是 date/time 格式,时间是整数(存储,例如上午 8 点为 800,下午 1 点为 1300)。其他列与此目的无关,但假设它们是我想要求和的整数。
对列 Column1、Column2 和 Column3 求和的最有效方法是什么?假设我想要 2019 年 8 月 1 日上午 10 点到 2019 年 8 月 5 日上午 11 点之间的行。
我的第一次尝试是:
SELECT Date, Time, SUM(Column1), SUM(Column2), SUM(Column3)
FROM table
WHERE (Date >= '08/01/19' AND Time >= 1000) AND (Date <= '08/05/19' AND Time < 1100);
但是考虑一下这意味着我同时要求某物大于等于 1000 且小于 1100。结果只返回了那些日子上午 10 点到 11 点之间的记录。
我的下一次尝试是:
SELECT Date, Time, SUM(Column1), SUM(Column2), SUM(Column3)
FROM table
WHERE ((Date = '08/01/19' AND Time >= 1000)
OR (Date BETWEEN '08/02/19' AND '08/04/19')
OR (Date = '08/05/19' AND Time < 1100));
这提供了我正在寻找的结果,但似乎效率不高 - 并且以编程方式构建可能很复杂。
如果这是最好的解决方案,我同意。只是希望有比我聪明的人来纠正我。
如果您将值存储在不同的列中,那么您似乎想要:
where (date > '2019-08-01' or
date = '2019-08-01' and time > 1000
) and
(date < '2019-08-05' or
date = '2019-08-05' and time < 1100
)
如果 date/time 值存储在单个列中,这会更简单。
我有一个 Informix 数据库(除了执行 SELECT 语句外我无法控制它)它包含以下列:
Date | Time | Column1 | Column2 | Column3
日期是 date/time 格式,时间是整数(存储,例如上午 8 点为 800,下午 1 点为 1300)。其他列与此目的无关,但假设它们是我想要求和的整数。
对列 Column1、Column2 和 Column3 求和的最有效方法是什么?假设我想要 2019 年 8 月 1 日上午 10 点到 2019 年 8 月 5 日上午 11 点之间的行。
我的第一次尝试是:
SELECT Date, Time, SUM(Column1), SUM(Column2), SUM(Column3)
FROM table
WHERE (Date >= '08/01/19' AND Time >= 1000) AND (Date <= '08/05/19' AND Time < 1100);
但是考虑一下这意味着我同时要求某物大于等于 1000 且小于 1100。结果只返回了那些日子上午 10 点到 11 点之间的记录。
我的下一次尝试是:
SELECT Date, Time, SUM(Column1), SUM(Column2), SUM(Column3)
FROM table
WHERE ((Date = '08/01/19' AND Time >= 1000)
OR (Date BETWEEN '08/02/19' AND '08/04/19')
OR (Date = '08/05/19' AND Time < 1100));
这提供了我正在寻找的结果,但似乎效率不高 - 并且以编程方式构建可能很复杂。
如果这是最好的解决方案,我同意。只是希望有比我聪明的人来纠正我。
如果您将值存储在不同的列中,那么您似乎想要:
where (date > '2019-08-01' or
date = '2019-08-01' and time > 1000
) and
(date < '2019-08-05' or
date = '2019-08-05' and time < 1100
)
如果 date/time 值存储在单个列中,这会更简单。