2012-04-29 163 views
4

我正在写一份报告,需要每天显示一个值。我有查询的开始日期和结束日期,但是我希望避免在表格不包含特定日期的值的情况下丢失日期。 我正在考虑创建一个基准日期范围表,该表涵盖了开始和结束之间的所有天数,然后将其与数据表连接起来以显示每天的值。创建日期范围表

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

谢谢

+0

[在SQL Server中获取日期范围内的所有日期](http://stackoverflow.com/questions/9140308/get-all-dates-in-date-range-in-sql-server) –

+0

谢谢@AndriyM,但是所示的线程包含了在MS SQL Server上使用T-SQL实现的特定示例。不幸的是(或幸运的是,取决于你问谁)我正在使用SQLite,这意味着我不能使用所示的解决方案。 – itayw

+0

我相信当我看到你的问题时,发生了一些事情,否则我无法解释我怎么会错过'sqlite'标签。抱歉。尽管如此,接受的答案的基本思想是使用数字表。也许它也适用于你的情况。 –

回答

3

这里是你如何可以使用一个号码表来扩大范围:

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); 
/* #… */ 

每一行#N结果在表2个ň行,数量最多的是2N-1

方法的演示可以发现(和玩)on SQL Fiddle

+0

COOL!我相信这会非常方便,可以谢谢! – itayw

+1

@mr。 kav数字表格非常全用,请参阅[创建和填充数字表格的最佳方式是什么?](http://stackoverflow.com/q/1393951/65223) –

0

它取决于你想要的细节水平。 如果您只是想从一个日期,直到B可以做到这一点:

declare @start datetime 
set @start = '04/20/2012' 
while @start <getdate() begin 
    print @start 
    set @start = dateadd(dd,1,@start) 
end 

只是改变打印到一个表上的插入。

如果您需要更多详细信息,您可能需要更详细的脚本。我可以指出你一些,只是对你的要求更具体的

+0

谢谢,但是我正在寻找一个查询来动态地计算日期以保存迭代处理时间。例如,我期望获得一年的第二次分解。 – itayw

+0

我不认为你会发现在飞行中产生31.536.000记录的好方法.. – Diego