一尘不染

创建日期范围表

sql

我正在写一份报告,该报告需要显示每天的价值。我有查询的开始日期和结束日期,但是如果表中没有特定日期的值,我希望避免丢失日期。我正在考虑创建一个基本日期范围表,该表保存从开始到结束之间的所有天数,然后将其与数据表保持连接以显示每天的值。

我发现了一些用于mySQL,SQL Server等的脚本。但是没有用于SQLite的脚本。有没有一种方法可以用日期范围快速填充表格?

谢谢


阅读 150

收藏
2021-05-23

共1个答案

一尘不染

这是使用数字表扩展范围的方法:

SELECT
  datetime('now', N || ' seconds') AS DT
FROM numbers
WHERE N < strftime('%s', 'now', '1 minutes') - strftime('%s', 'now');

在这种情况下,数字表应该保留从0开始的数字。

数字表是一个值得在许多目的上方便使用的工具。您可以这样初始化它,例如:

CREATE TABLE numbers (N int);
/* #0 */ INSERT INTO numbers (N) SELECT 0;
/* #1 */ INSERT INTO numbers (N) SELECT N + C FROM numbers, (SELECT COUNT(*) AS C FROM numbers);
/* #2 */ INSERT INTO numbers (N) SELECT N + C FROM numbers, (SELECT COUNT(*) AS C FROM numbers);
/* #3 */ INSERT INTO numbers (N) SELECT N + C FROM numbers, (SELECT COUNT(*) AS C FROM numbers);
/* #4 */ INSERT INTO numbers (N) SELECT N + C FROM numbers, (SELECT COUNT(*) AS C FROM numbers);
/* #5 */ INSERT INTO numbers (N) SELECT N + C FROM numbers, (SELECT COUNT(*) AS C FROM numbers);
/* #6 */ INSERT INTO numbers (N) SELECT N + C FROM numbers, (SELECT COUNT(*) AS C FROM numbers);
/* #… */

每行导致表中有2 N 行,其中最大的行是# _N_ __2 _N_ -1

可以在SQL Fiddle上找到(并使用)该方法的演示。

2021-05-23