2014-11-13 3 views
0

У меня есть таблица PostgreSQL со структурой, как этотPostgreSQL: элементы подсчета в час и позиции

id elementid timestamp    providerid x y 
1  1   2014-10-01T00:00:00Z  12   12 18 
2  1   2014-10-01T00:10:00Z  12   14 18 
3  1   2014-10-01T00:15:00Z  12   16 20 
4  2   2014-10-01T00:50:00Z  12   12 18 
5  2   2014-10-01T01:10:00Z  12   14 18 
6  2   2014-10-01T01:15:00Z  12   16 20 
7  7   2014-10-01T00:00:00Z  14   12 18 
8  7   2014-10-01T00:10:00Z  14   14 18 
9  7   2014-10-01T00:15:00Z  14   16 20 

И я хочу, чтобы подсчитать количество различных elementid, принадлежащих к одной и той же providerid в час и положение.

Пример

Между 00:00 и 1:00, в коробке, определяемой Xmin = 12, Ymin = 18, Xmax = 16, утах = 20, есть 2 элемента принадлежащий providerid 12 (4 первые записи: элемент с elementid = 1 и элемент с elementid = 2). Итак, счет 2 элемента в час, для providerid = 12.

Как вы можете видеть, Я действительно занимаюсь перемещением элементов. Итак, за этот период (1 час) я получаю элемент 1 в 3 разных положениях, а элемент 2 - в одной позиции. Итак, всего 2 элемента, принадлежащих одному провайдеру (providerid = 12).

Тогда мой ResultSet должен выглядеть следующим образом:

providerid    start_time    end_time num_elements 
     12 2014-10-01T00:00:00Z 2014-10-01T01:00:00Z    2 

И я хочу такой же, для каждого поставщика.

Я думаю, что ответ похож на this one, this one или this one, но все еще не нашел решение. Любая помощь действительно ценится.

Большое спасибо заранее!

ответ

1

Вы попробовали COUNT(DISTINCT ...)?

SELECT t1."providerid", 
     s.start_time, 
     s.end_time, 
     COUNT(DISTINCT "elementid") As num_elements 
FROM table1 t1 
JOIN start_end_time s 
ON t1."timestamp" BETWEEN s.start_time AND s.end_time 
GROUP BY 
     t1."providerid", 
     s.start_time, 
     s.end_time 

Демо: http://sqlfiddle.com/#!12/b55a8/2

+0

Отлично! Он работает так, как ожидалось. Большое спасибо! – jorgeas80

Смежные вопросы