2012-07-18 67 views
0

我在Oracle中有一個表格,列中有[DATEID date,COUNT_OF_PHOTOS int] 該表格基本上代表每天上傳的照片數量。SQL Query在當前月份之前顯示所有結果

我有一個總結,每月上傳的照片數量的查詢:

select extract(year from dateid) as year, extract(month from dateid) as month, count(1) as Photos 
from picture_table 
group by extract(year from dateid), extract(month from dateid) 
order by 1, 2 

此我想要做什麼,但我想運行在每個月初這個查詢,可以說07- 02-2012,所有數據不包括當前月份。我如何添加一個WHERE子句來忽略所有日期等於當前年份+月份的條目?

回答

1

這裏有一種方法:

where to_char(dateid, 'YYYY-MM') <> to_char(sysdate, 'YYYY-MM') 
1

要保留對dateid你可能有任何索引策略:

select extract(year from dateid) as year, extract(month from dateid) as month, count(1) as Photos 
from picture_table 
WHERE (dateid < TRUNC(SYSDATE,'MM') OR dateid >= ADD_MONTHS(TRUNC(SYSDATE,'MM'),1)) 
group by extract(year from dateid), extract(month from dateid) 
order by 1, 2 
+0

要求是計算已先於當月上傳的照片。因此你的第二個過濾器是不必要這是可能的,以防止未來太遠:) – APC 2012-07-19 14:17:45

+0

你的觀點關於索引策略是一個複雜的。由於目前的查詢,它可以完全從DATEID上的索引完全解決,而無需觸摸表格。然而,如果其他列被添加到投影中,那麼執行全表掃描而不是使用索引會更有效率(因爲會有更多的記錄不是當前月份)。 – APC 2012-07-19 14:20:12

相關問題