2012-04-29 161 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