Как реализовать запрос по данным требованиям?

Рейтинг: 0Ответов: 1Опубликовано: 05.05.2015

Входные данные - Дата

SQL Запрос: Подсчитать количество ID, у которых значение Value по последней дате больше нуля.

Recid (key) |   ID  |   Date   | Value
1           |   1   | 02.02.11 |   7
2           |   1   | 02.03.12 |   8
3           |   1   | 02.04.13 |   0
4           |   1   | 02.05.14 |   2
5           |   2   | 02.01.12 |   8
6           |   2   | 02.02.13 |   0
7           |   3   | 02.02.13 |   2
8           |   3   | 02.03.14 |   2
9           |   3   | 02.05.14 |   0

Ввели дату - 03.05.14: Результат Count=1 (ID - 1)
Ввели дату - 03.05.13: Результат Count=1 (ID - 3)

Ответы

▲ 1

Попробуйте так:

select count(*)
from rec join (
  select max(`date`) d, id 
  from rec
  where 
    `date`<"2013-05-03 00:00:00"
  group by id
) drec on rec.id = drec.id and rec.`date` = drec.d
where 
  rec.value>0;

Внутренний запрос берет записи "по последней дате", внешний отсекает нули.

http://sqlfiddle.com/#!9/5c173/15