2012-01-13 11 views
0

我有這個表選擇日期路口

+------+--------+-------------------------+ 
| id | amount | start_date | end_date | 
| 10 |  10 | 2012-01-15 | 2012-01-20 | 
| 10 |  12 | 2012-01-14 | 2012-01-15 | 
| 10 |  22 | 2012-01-15 | 2012-01-16 | 
+------+--------+-------------------------+ 

我會想找到一個給定的區間的總和。

實施例:

開始日期:2012-01-13
結束日期:2012-01-18
總和(量)= 44

開始日期:2012-01- 18
結束日期:2012-01-21
總和(量)= 10

是,可能使用單個查詢?
這是可能的嗎?

EDIT
背後的邏輯是,如果intevarls(給定的一個和在表內)重疊,我應該得到的行。

+0

任何事情都可能,如果你相信!其實,你能否在這裏詳細介紹一下?像你這樣的請求_sounds_要去_inclusive_集合,但是這些例子顯示了其他情況。 – 2012-01-13 14:05:17

+0

誰低估了,爲什麼?沒有評論爲什麼,你期望達到什麼目的? – MatBailie 2012-01-13 14:29:30

+0

@Dems感謝upvote:P – tampe125 2012-01-13 14:40:10

回答

3
SELECT SUM(amount) 
FROM TableX 
WHERE start_date <= @EndDate 
    AND @StartDate <= end_date 

其中@StartDate@EndDate你想與檢查的日期。

+1

+1:這是絕對正確的。但我會添加一些額外的東西。如果你有'start_date,end_date'的索引,你實際上只能從'start_date'部分受益。並且,您只需指定'start_date <= @ endDate'。如果您知道表中存在的最長時間段,則可以添加'AND start_date> = @startDate - (longestPeriod)'。在大型數據集中,這可以大量減少正在檢查的記錄數。這導致我在這種類型的模式中執行最大持續時間,然後有多個記錄來表示較長的時間段。 – MatBailie 2012-01-13 14:28:51

+0

我已經嘗試過這個解決方案,它沒有工作..你知道爲什麼嗎?我忘了報價日期!我笨...... :) – tampe125 2012-01-13 14:39:34

+0

@Dems:不錯。這種兩種(或更多)的範圍條件始終難以優化。我想加入AND(@ StartDate-longestPeriod)<= end_date'也可能有幫助。 – 2012-01-14 07:55:54

0

SELECT SUM(額),表,其中起始日期> '2012-01-13' 日期和結束日期< '2012-01-18'

0

當然,你可以這樣做:

select sum(amount) from my_dates where start_date >= '2012-01-13' and end_date <= '2012-01-18' 

給你34.如果你想獲得44你會怎麼做:

select sum(amount) from my_dates where start_date >= '2012-01-13' and end_date <= '2012-01-20' 

希望這有助於

0
SELECT SUM(`amount`) as TotalAmount 
FROM `tableName` 
WHERE (start_date >= '2012-01-13 00:00:00' 
      AND 
     end_date <= '2012-01-18 23:59:59')