所以我有這樣的數據生成兩個時間之間的所有分鐘PLSQL
DATA COUNT 29/11/2016 22:11:00 120 29/11/2016 22:12:00 132 29/11/2016 22:13:00 551 29/11/2016 22:14:00 1 29/11/2016 22:33:00 1
的,我需要獲得所有的分鐘的列表,其中如果不能符合我的連接條件的日期,它會顯示0
因此,在短期:
我需要生成PLSQL兩次之間的所有分鐘,所以我可以用我的數據加入這個名單
所以我有這樣的數據生成兩個時間之間的所有分鐘PLSQL
DATA COUNT 29/11/2016 22:11:00 120 29/11/2016 22:12:00 132 29/11/2016 22:13:00 551 29/11/2016 22:14:00 1 29/11/2016 22:33:00 1
的,我需要獲得所有的分鐘的列表,其中如果不能符合我的連接條件的日期,它會顯示0
因此,在短期:
我需要生成PLSQL兩次之間的所有分鐘,所以我可以用我的數據加入這個名單
Thi s應該訣竅,並且會考慮跨越日子的時間(例如, 23:50 - 00:10):
WITH boundary_dates AS (SELECT to_date('29/11/2016 23:50:45', 'dd/mm/yyyy hh24:mi:ss') start_date,
to_date('30/11/2016 00:10:00', 'dd/mm/yyyy hh24:mi:ss') end_date
FROM dual)
SELECT trunc(start_date, 'mi') + (LEVEL -1)/1440 dt
FROM boundary_dates
CONNECT BY LEVEL <= (end_date - trunc(start_date, 'mi'))*1440 + 1;
DT
----------------
29/11/2016 23:50
29/11/2016 23:51
29/11/2016 23:52
29/11/2016 23:53
29/11/2016 23:54
29/11/2016 23:55
29/11/2016 23:56
29/11/2016 23:57
29/11/2016 23:58
29/11/2016 23:59
30/11/2016 00:00
30/11/2016 00:01
30/11/2016 00:02
30/11/2016 00:03
30/11/2016 00:04
30/11/2016 00:05
30/11/2016 00:06
30/11/2016 00:07
30/11/2016 00:08
30/11/2016 00:09
30/11/2016 00:10
然後,您只需留下您的加入其他表/視圖/查詢到這一點,並使用NVL /合併輸出0「失蹤」的價值觀。
N.B.我的例子使用子查詢來傳入開始/結束日期。你可能會使用變量(可能作爲參數傳入),所以你不需要boundary_dates子查詢。
好的。
我花了不到心想:
SELECT
(to_date('29-11-2016 20:59:00','DD-MM-YYYY HH24:MI:SS') + level/1440) AS date
FROM
dual
CONNECT BY LEVEL <= (round((to_date('23:59:59','HH24:MI:SS') - to_date('21:00:00','HH24:MI:SS'))*1440,0));
試圖解釋:
與(round((to_date('23:59:59','HH24:MI:SS') - to_date('21:00:00','HH24:MI:SS'))*1440,0)
我計算分鐘的兩個不同時間之間(所以現在我得到180分鐘)
隨着to_date('29-11-2016 20:59:00','DD-MM-YYYY HH24:MI:SS') + level/1440
我總計我的date 29-11-2016 20:59:00
所有分鐘前由level/1440
您需要在'connect by level <= ...'子句中包含日期,否則當結束日期與開始日期不同時,會發生什麼? – Boneist
你是什麼意思? –
我會添加一個希望展示的答案,因爲評論太長 – Boneist