2015-09-03 93 views
0

我對HAVING SUM語句有疑問。HAVING SUM問題

My table: 

id int(11) AUTO_INCREMENT 
date date 
number int(3) 

+----+------------+--------+ 
| id | date  | number | 
+----+------------+--------+  
| 1 | 2010-01-02 | 0 | 
| 2 | 2010-01-03 | 3 | 
| 3 | 2010-01-04 | 0 | 
| 4 | 2010-01-05 | 2 | 
| 5 | 2010-01-06 | 1 | 
| 6 | 2010-01-07 | 3 | 
+----+------------+--------+ 

我想返回日期時數的SUM是6和date>'2010-01-04'

欲返回日期時加入場數的等於6(特定日期之後,在本例中爲2010-01-04)。例如:我的查詢應在2010-01-05 1 2010-01-07

返回2010-01-07,因爲2 2010-01-06 3我測試過此查詢沒有成功:

SELECT date, SUM(number) AS total FROM MyTable 
GROUP BY date 
HAVING SUM(number) = 6 
+0

即使在更新您的問題之後,仍然不清楚您要開始滾動和的位置。 –

+0

如果最後一行的數字是4,該怎麼辦?結果永遠不會等於6.那麼,那麼呢? – Strawberry

回答

0
select date 
    from 
     (select date, @n:[email protected]+total total 
      from 
      (select date, sum(number) total 
       from MyTable 
       where date > '2010-01-04' 
       group by date 
       order by date 
      ) t 
      cross join 
      (select @n:=0) n 
    ) tt 
    where total = 6 
+0

謝謝,我測試了你的答案。這兩個作品=) – Pierre001

+0

Splash58,我有使用你的代碼(但我更改選擇日期選擇MAX(日期))。 你有一個想法,如果循環不能返回預期的日期(如果它不存在於數據庫中),在這種情況下,我不希望返回MAX(日期),並且沒有結果 以這種方式我可以用我的PHP腳本設置一個錯誤信息... thanks =) – Pierre001

+0

當你使用組函數mysql返回結果。我認爲如果詢問日期,您將不會收到任何信息,但最大值(日期) – splash58

2

看起來像你差不多在你的原始問題中有正確的查詢。我添加了一個WHERE子句限制到只有日期這比2010-01-04更近:

SELECT date, SUM(number) AS total 
FROM MyTable 
WHERE date > '2010-01-04' 
GROUP BY date 
HAVING SUM(number) = 6 
+0

根據您在OP中給出的樣本數據,沒有匹配的記錄。請編輯您的問題並向我們顯示「MyTable」的表格定義。如果向我們展示一個將生成非空結果集的樣本輸入,它可能會很好。 –

+0

您需要擁有一組共享特定日期的記錄,其數量_sum_等於6.您給我們的數據樣本只有一個記錄每個日期,並且'number'值都小於6. –

+0

您的原始文件那麼問題就不清楚了。您的要求與您的OP所暗示的完全不同。 –

0

想想自連接是可能做到這一點最簡單的方法,對自身加入你的表,其中的日期等於或大於自身。

SELECT t1.date 
FROM sometable t1 
INNER JOIN sometable t2 
ON t1.date <= t2.date 
WHERE date > '2010-01-04' 
GROUP BY t1.date 
HAVING SUM(number) = 6