#sql #sql-server #compare
#sql #sql-сервер #Сравнить
Вопрос:
У меня есть таблица, которая содержит значения, считываемые с 2 метров:
----------------------------
Date | MeterID | Value
----------------------------
1/2/14 A 1.3
2/2/14 A 1.8
2/2/14 B 3.8
3/3/14 A 1.2
4/3/14 A 1.8
4/3/14 B 2.9
Мне нужен запрос, который будет подсчитывать количество дней, в течение которых существует чтение для ОБОИХ типов счетчиков ( A
amp; B
)?
В приведенном выше примере это должно дать 2 в качестве результата.
Спасибо.
Ответ №1:
Вы можете использовать временную таблицу для перечисления [Date]
s, когда были вхождения MeterID
для обоих A
и B
, а затем COUNT()
все это [Date]
s :
SELECT COUNT(t.*)
FROM ( SELECT [Date]
FROM [table]
GROUP BY [Date]
HAVING COUNT(DISTINCT [MeterID]) = 2
) t
Комментарии:
1. Спасибо за это …. еще один вопрос….. Если бы у меня было другое поле, которое я также хотел отфильтровать, например, имя человека, который снимал показания, тогда я бы хотел подсчитать количество дней, в течение которых каждый человек снимал показания обоих счетчиков в один и тот же день — как бы я это добавил???
2. @user3359779: Ну, это не совсем понятно, но вы можете попробовать добавить
name
вSELECT
GROUP BY
предложения and , чтобы получить данные для каждого человека и дня.
Ответ №2:
Другое решение, использующее наборы:
select count(*) from
(
select distinct date from table where meterid='A'
intersect
select distinct date from table where meterid='B'
) x