2014-01-16 3 views
0

данныхSQL Присоединяйтесь к тем же таблицам в datetime?

id | name |   ReadingDateTime | RID |   RName |  Value 
173 | OLİMPA | 2013-12-27 14:06:39.000 | 15 | Aktif Endeks T1 | 12414,146 
173 | OLİMPA | 2013-12-30 13:43:31.000 | 15 | Aktif Endeks T1 | 12444,355 
173 | OLİMPA | 2013-12-31 12:44:29.000 | 15 | Aktif Endeks T1 | 12452,486 
173 | OLİMPA | 2013-12-31 15:14:27.000 | 15 | Aktif Endeks T1 | 12456,518 
173 | OLİMPA | 2013-12-31 17:14:34.000 | 15 | Aktif Endeks T1 | 12459,294 
... 

Запрос

SELECT SRA2.Value-SRA.Value AS Diff, SRA.* 
FROM Summary_Reading_All SRA 
INNER JOIN Summary_Reading_All SRA2 ON SRA2.ReadingDateTime = SRA.ReadingDateTime 
WHERE SRA.ReadingTypeId = 15 
AND SRA.DeviceId = 173 
ORDER BY SRA.ReadingDateTime 

Выход

Diff  | id | name |   ReadingDateTime | RID |   RName |  Value 
0   | 173 | OLİMPA | 2013-12-27 14:06:39.000 | 15 | Aktif Endeks T1 | 12414,146 
-5978,216 | 173 | OLİMPA | 2013-12-27 14:06:39.000 | 15 | Aktif Endeks T1 | 12414,146 
-7807,397 | 173 | OLİMPA | 2013-12-27 14:06:39.000 | 15 | Aktif Endeks T1 | 12414,146 
-12414,146 | 173 | OLİMPA | 2013-12-27 14:06:39.000 | 15 | Aktif Endeks T1 | 12414,146 
11042,679 | 173 | OLİMPA | 2013-12-27 14:06:39.000 | 15 | Aktif Endeks T1 | 12414,146 
-11580,143 | 173 | OLİMPA | 2013-12-27 14:06:39.000 | 15 | Aktif Endeks T1 | 12414,146 
-12414,146 | 173 | OLİMPA | 2013-12-27 14:06:39.000 | 15 | Aktif Endeks T1 | 12414,146 
(7 times) 
Diff | 173 | OLİMPA | 2013-12-30 13:43:31.000 | 15 | Aktif Endeks T1 | 12444,355 
(7 times) 
Diff | 173 | OLİMPA | 2013-12-31 12:44:29.000 | 15 | Aktif Endeks T1 | 12452,486 
(7 times) 
Diff | 173 | OLİMPA | 2013-12-31 15:14:27.000 | 15 | Aktif Endeks T1 | 12456,518 
(7 times) 
Diff | 173 | OLİMPA | 2013-12-31 17:14:34.000 | 15 | Aktif Endeks T1 | 12459,294 

Я хочу присоединиться к той же таблице и получить разницу в полях. Когда я выполняю код выше, повторите каждую запись 7 раз. Почему записи повторяются 7 раз, поле datetime - uniqe.

Любые консультации, спасибо ...

ответ

1

Дальше TheConstructors ответить ....

SELECT SRA2.Value-SRA.Value AS Diff, SRA.* 
FROM Summary_Reading_All SRA 
INNER JOIN Summary_Reading_All SRA2 ON SRA2.ReadingDateTime = SRA.ReadingDateTime 
AND SRA.ReadingTypeId = SRA2.ReadingTypeId 
AND SRA.DeviceId = SRA2.DeviceId 
WHERE SRA.ReadingTypeId = 15 
AND SRA.DeviceId = 173 
ORDER BY SRA.ReadingDateTime 
+0

Спасибо, очень много ... Я понимаю, почему повторить 7 раз. Первая таблица фильтруется с помощью deviceId и ReadingTypeId, а вторая таблица - нет. –

+0

Второй вопрос: как я могу получить разницу полей значений? Я хочу получить 'SRA.Value [1] - SRA.Value [0]' мой код неправильный, чтобы получить его. –

+0

Как вы определяете получение SRA.Value [1] - SRA.Value [0]? Приведите пример. –

0

Если ReadingDateTime является уникальным, вы должны получить только одну строку, где Diff является 0, так как только сама линия может FULLFILL в SRA2.ReadingDateTime = SRA.ReadingDateTime часть запроса.

В настоящее время ваше условие WHERE относится только к SRA, но не SRA2. Чтобы получить значимые результаты, я думаю, вам нужно найти способ не соответствовать линии с самим собой; возможно, выбрав другое устройство в SRA2 или проверив, что первичный ключ отличается между SRA и SRA2.

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