Подсчет уникальных записей в 2 таблицах - PullRequest
0 голосов
/ 08 января 2010

У меня есть две таблицы, которые содержат данные от разных датчиков температуры:
Table1
_TimeStamp Температура
2009-12-20 11: 59: 56,2 10,1
2009-12-20 11: 59: 56,3 10,2
2009-12-20 11: 59: 56,4 11,0
2009-12-20 11: 59: 56,5 Нуль

Table2
Температура _TimeStamp
2009-12-20 11: 59: 56,2 10,5
2009-12-20 11: 59: 56,5 9,8
2009-12-20 11: 59: 56,7 12,0
2009-12-20 11: 59: 56,9 10,0

Я хочу посчитать количество записей, для которых один из двух датчиков температуры сделал ненулевое измерение. Для приведенного выше примера счетчик равен 6, хотя на самом деле в каждой таблице 864000 записей или около того. Я знаю, что следующий запрос SQL Server неверен, но не могли бы вы помочь исправить его?

(SELECT DISTINCT COUNT(_TimeStamp) FROM Table1) UNION  (SELECT DISTINCT COUNT(_TimeStamp) FROM Table2)

Ответы [ 4 ]

4 голосов
/ 08 января 2010

Посмотрите на это

DECLARE @Table1 TABLE(
        _TimeStamp DATETIME,
        Temperature FLOAT
)

DECLARE @Table2 TABLE(
        _TimeStamp DATETIME,
        Temperature FLOAT
)

INSERT INTO @Table1 SELECT '2009-12-20 11:59:56.2',10.1  
INSERT INTO @Table1 SELECT '2009-12-20 11:59:56.3',10.2  
INSERT INTO @Table1 SELECT '2009-12-20 11:59:56.4',11.0  
INSERT INTO @Table1 SELECT '2009-12-20 11:59:56.5',Null  


INSERT INTO @Table2 SELECT '2009-12-20 11:59:56.2',10.5  
INSERT INTO @Table2 SELECT '2009-12-20 11:59:56.5',9.8  
INSERT INTO @Table2 SELECT '2009-12-20 11:59:56.7',12.0  
INSERT INTO @Table2 SELECT '2009-12-20 11:59:56.9',10.0  

SELECT COUNT(1) TOTAL
FROM    (
            SELECT _TimeStamp FROM @Table1 WHERE Temperature IS NOT NULL
            UNION
            SELECT _TimeStamp FROM @Table2 WHERE Temperature IS NOT NULL
        ) sub

Используя UNION и не UNION ALL , вы получите DISTINCT отметки времени.

1 голос
/ 08 января 2010

сначала нужно объединиться, а затем подсчитать.

select count(ts) from
(
 select _timestamp as ts
 from table1
 where temperature is not null
 union  
 select _timestamp 
 from table2
 where temperature is not null
)innerSql
0 голосов
/ 08 января 2010

Вы должны попробовать что-то подобное.

SELECT
(
   (SELECT DISTINCT COUNT(Id) FROM [Table]) +
   (SELECT DISTINCT COUNT(Id) FROM [Table2])
)

Это даст вам сумму отсчетов из обеих таблиц. Вы можете изменить подзапросы, чтобы отображать любые условия, которые вы хотите.

0 голосов
/ 08 января 2010

откуда отсчет 6 берется из ваших данных?
и что не так с вашим запросом?
Кажется, хорошо для меня. Вы просто должны удалить () вокруг выбора и назвать столбцы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...