2015-09-03 1 views
0

У меня возник вопрос о заявлении, в котором он находится.HAVING SUM issue

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-07, поскольку 2 в 2010-01-05-в 2010-01-06-в 2010-01-07

Я проверил этот запрос без успеха:

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 (date)). У вас есть идея, если цикл не сможет вернуть ожидаемую дату (если он отсутствует в базе данных), В этом случае я не хочу возврата MAX (даты) и никакого результата Таким образом я могу установить сообщение об ошибке с моим PHP-скриптом ... thanks =) – Pierre001

+0

при использовании групповой функции mysql возвращает результат. Я думаю, вы не получите строку, если задаете дату, но max (date) – 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. У образца данных, который вы нам дали, есть только одна запись за дату, а значения «число» - меньше 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