Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 пропадает часть результата при MAX (Date)  [new]
keen_gaff
Member

Откуда:
Сообщений: 13
Сервер SQL2005 (да и на 2012 тоже самое)
Запрос:
SELECT     DeviceId, Time, NormValue
FROM         RW_ReceivedData AS r
WHERE     (Time =
                          (SELECT     MAX( Time)
                            FROM          RW_ReceivedData
                            WHERE      (r.DeviceId = DeviceId)
                            )) AND (Unit = 30)
ORDER BY DeviceId

В результате должно быть около 480 записей, а получается только 189, пропадают из середины неравными частями...
При запросе
SELECT     DeviceId, Time, NormValue
FROM         RW_ReceivedData AS r
WHERE     (Time =
                          (SELECT     TOP (1) Time
                            FROM          RW_ReceivedData
                            WHERE      (r.DeviceId = DeviceId)
                            ORDER BY Time DESC) AND (Unit = 30))
ORDER BY DeviceId

результат тот же.
В чем может быть проблема?
5 мар 15, 13:13    [17346427]     Ответить | Цитировать Сообщить модератору
 Re: пропадает часть результата при MAX (Date)  [new]
Добрый Э - Эх
Guest
keen_gaff,

так-то про MS SQL Server ветка сильно выше. Тут MySQL обсуждают, если что...
5 мар 15, 13:15    [17346442]     Ответить | Цитировать Сообщить модератору
 Re: пропадает часть результата при MAX (Date)  [new]
Добрый Э - Эх
Guest
keen_gaff,

но в целом, почему ты решил, что записей возвращается меньше нужного? Time какой тип данный имеет?
5 мар 15, 13:16    [17346448]     Ответить | Цитировать Сообщить модератору
 Re: пропадает часть результата при MAX (Date)  [new]
tanglir
Member

Откуда:
Сообщений: 28966
keen_gaff
В чем может быть проблема?
Ну, для начала в том, что вы ошиблись форумом...
keen_gaff
результат тот же.
Запросы в общем-то по смыслу идентичные, так что ничего удивительного в этом нет.

Модератор: Тема перенесена из форума "MySQL".


Сообщение было отредактировано: 5 мар 15, 13:23
5 мар 15, 13:20    [17346480]     Ответить | Цитировать Сообщить модератору
 Re: пропадает часть результата при MAX (Date)  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
keen_gaff,
поле Time какаго типа у вас ?
5 мар 15, 13:26    [17346537]     Ответить | Цитировать Сообщить модератору
 Re: пропадает часть результата при MAX (Date)  [new]
keen_gaff
Member

Откуда:
Сообщений: 13
Maxx
поле Time какаго типа у вас ?

Дата время, типа 2015-02-11 00:00:00.000
5 мар 15, 13:37    [17346630]     Ответить | Цитировать Сообщить модератору
 Re: пропадает часть результата при MAX (Date)  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
> В чем может быть проблема?

получить-то чего хочется? словами, а еще лучше примером исходных данных и желаемого результата.
5 мар 15, 13:41    [17346644]     Ответить | Цитировать Сообщить модератору
 Re: пропадает часть результата при MAX (Date)  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
keen_gaff,

ну тогда результат запроса скорее всего честный.... у вас же стоит равно..а дискретность датавремя до 3 милисекунд в сиквеле,что МАХ() шо ТОР 1 выдают 1 значение...просто селектните ожидаемый вами результат и думаю ,что вы увидите что таки там разное время
5 мар 15, 13:42    [17346655]     Ответить | Цитировать Сообщить модератору
 Re: пропадает часть результата при MAX (Date)  [new]
Glory
Member

Откуда:
Сообщений: 104751
SELECT     DeviceId, Time, NormValue
FROM         RW_ReceivedData AS r
WHERE     (Time =
                          (SELECT     TOP (1) X.Time
                            FROM          RW_ReceivedData X
                            WHERE      (r.DeviceId = X.DeviceId)
                            ORDER BY X.Time DESC) 
AND (Unit = 30))
ORDER BY DeviceId
5 мар 15, 13:42    [17346658]     Ответить | Цитировать Сообщить модератору
 Re: пропадает часть результата при MAX (Date)  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
SELECT TOP(1) WITH TIES *
FROM RW_ReceivedData
ORDER BY ROW_NUMBER()OVER(PARTITION BY DeviceId ORDER BY [Time] DESC);
5 мар 15, 13:52    [17346734]     Ответить | Цитировать Сообщить модератору
 Re: пропадает часть результата при MAX (Date)  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
iap
SELECT TOP(1) WITH TIES *
FROM RW_ReceivedData
ORDER BY ROW_NUMBER()OVER(PARTITION BY DeviceId ORDER BY [Time] DESC);
Поправка:
SELECT TOP(1) WITH TIES *
FROM RW_ReceivedData
WHERE Unit=30
ORDER BY ROW_NUMBER()OVER(PARTITION BY DeviceId ORDER BY [Time] DESC);
5 мар 15, 13:53    [17346741]     Ответить | Цитировать Сообщить модератору
 Re: пропадает часть результата при MAX (Date)  [new]
keen_gaff
Member

Откуда:
Сообщений: 13
Сама таблица, записываются значения несколько раз в день, нужные с идентификатором Unit = 30,

DeviceID Data                   NornValue                         Unit
1	2014-12-12 00:00:00.000	5348590.0000000000000000000	30
1	2014-12-12 00:00:00.000	8192.0000000000000000000	255
1	2014-12-12 00:00:00.000	10.0000000000000000000	255
1	2014-12-13 00:00:00.000	5348590.0000000000000000000	30
1	2014-12-13 00:00:00.000	8192.0000000000000000000	255
1	2014-12-13 00:00:00.000	2.0000000000000000000	255
1	2014-12-14 00:00:00.000	5348590.0000000000000000000	30
1	2014-12-14 00:00:00.000	8192.0000000000000000000	255
1	2015-03-01 00:00:00.000	5393990.0000000000000000000	30
1	2015-03-02 00:00:00.000	5393990.0000000000000000000	30
1	2015-03-03 00:00:00.000	5393990.0000000000000000000	30
1	2015-03-04 00:00:00.000	5393990.0000000000000000000	30
1	2015-03-05 00:00:00.000	5393990.0000000000000000000	30
2	2014-12-12 00:00:00.000	2241750.0000000000000000000	30
2	2014-12-12 00:00:00.000	0.0000000000000000000	255
2	2014-12-12 00:00:00.000	8.0000000000000000000	255
2	2014-12-12 00:00:00.000	6.0000000000000000000	27
2	2014-12-13 00:00:00.000	2241820.0000000000000000000	30
2	2014-12-13 00:00:00.000	0.0000000000000000000	255
2	2014-12-13 00:00:00.000	0.0000000000000000000	255
2	2014-12-13 00:00:00.000	4.0000000000000000000	27
2	2014-12-14 00:00:00.000	2241890.0000000000000000000	30


Выбрать только последние записи по каждой DeviceId
DeviceID  Data                   NornValue 
48	2015-03-05 00:00:00.000	9569970.0000000000000000000
49	2015-03-05 00:00:00.000	217770.0000000000000000000
50	2015-03-05 00:00:00.000	1373910.0000000000000000000
51	2015-03-05 00:00:00.000	2452790.0000000000000000000
74	2015-03-05 00:00:00.000	7954930.0000000000000000000
75	2015-03-05 00:00:00.000	5124370.0000000000000000000
76	2015-03-05 00:00:00.000	3383840.0000000000000000000
79	2015-03-05 00:00:00.000	3521980.0000000000000000000
80	2015-03-05 00:00:00.000	228070.0000000000000000000
81	2015-03-05 00:00:00.000	3892280.0000000000000000000

Тут видно что отсутствуют DeviceId с 52 по 73.
5 мар 15, 14:23    [17346963]     Ответить | Цитировать Сообщить модератору
 Re: пропадает часть результата при MAX (Date)  [new]
Glory
Member

Откуда:
Сообщений: 104751
keen_gaff
Тут видно что отсутствуют DeviceId с 52 по 73.

"Тут" - это где ? Где здесь начальные данные с "DeviceId с 52 по 73", а где резлультат ?
5 мар 15, 14:27    [17347005]     Ответить | Цитировать Сообщить модератору
 Re: пропадает часть результата при MAX (Date)  [new]
keen_gaff
Member

Откуда:
Сообщений: 13
Выбрать только последние записи по каждой DeviceId
DeviceID  Data                   NornValue 
48	2015-03-05 00:00:00.000	9569970.0000000000000000000
49	2015-03-05 00:00:00.000	217770.0000000000000000000
50	2015-03-05 00:00:00.000	1373910.0000000000000000000
51	2015-03-05 00:00:00.000	2452790.0000000000000000000
74	2015-03-05 00:00:00.000	7954930.0000000000000000000
75	2015-03-05 00:00:00.000	5124370.0000000000000000000
76	2015-03-05 00:00:00.000	3383840.0000000000000000000
79	2015-03-05 00:00:00.000	3521980.0000000000000000000
80	2015-03-05 00:00:00.000	228070.0000000000000000000
81	2015-03-05 00:00:00.000	3892280.0000000000000000000

Тут видно что отсутствуют DeviceId с 52 по 73.


"Тут" - это где ? Где здесь начальные данные с "DeviceId с 52 по 73", а где резлультат ?


Это и приведен результат выборки

Кстати...
[quot iap]
iap
Поправка:
SELECT TOP(1) WITH TIES *
FROM RW_ReceivedData
WHERE Unit=30
ORDER BY ROW_NUMBER()OVER(PARTITION BY DeviceId ORDER BY [Time] DESC);

этот запрос дает почти полный результат, пропадает только один из 488 DeviceId,
но сортировка почему-то страдает:
DeviceId Data                    NormValue
470	2015-03-05 00:00:00.000	7640520.0000000000000000000
471	2015-03-05 00:00:00.000	1755920.0000000000000000000
472	2015-03-05 00:00:00.000	176810.0000000000000000000
473	2015-03-05 00:00:00.000	3071570.0000000000000000000
474	2015-03-05 00:00:00.000	8344770.0000000000000000000
475	2015-03-05 00:00:00.000	260240.0000000000000000000
476	2015-03-05 00:00:00.000	26495180.0000000000000000000
477	2015-03-05 00:00:00.000	295240.0000000000000000000
478	2015-03-05 00:00:00.000	643290.0000000000000000000
479	2015-03-05 00:00:00.000	1337200.0000000000000000000
480	2015-03-05 00:00:00.000	4966720.0000000000000000000
481	2015-03-05 00:00:00.000	2765410.0000000000000000000
483	2015-03-05 00:00:00.000	6289660.0000000000000000000
485	2015-03-05 00:00:00.000	2094320.0000000000000000000
245	2015-02-28 01:00:00.000	2370550.0000000000000000000
153	2014-12-27 00:00:00.000	27797590.0000000000000000000
486	2015-03-01 00:00:00.000	4083000.0000000000000000000
487	2015-02-23 00:00:00.000	10393610.0000000000000000000
5 мар 15, 14:50    [17347197]     Ответить | Цитировать Сообщить модератору
 Re: пропадает часть результата при MAX (Date)  [new]
Glory
Member

Откуда:
Сообщений: 104751
keen_gaff
Это и приведен результат выборки

И надо вам поверить на слово, что в начальных данных какие-то записи есть, а в результате нет ?
5 мар 15, 14:54    [17347220]     Ответить | Цитировать Сообщить модератору
 Re: пропадает часть результата при MAX (Date)  [new]
да и 2012 тоже
Guest
keen_gaff,

может потому что максимальный Time у них может быть с Unit не равным 30?

выложи селект исходных данных с DeviceID=52
5 мар 15, 14:59    [17347274]     Ответить | Цитировать Сообщить модератору
 Re: пропадает часть результата при MAX (Date)  [new]
keen_gaff
Member

Откуда:
Сообщений: 13
Glory,

Видимо да, наверно нет смысла сюда выкладывать около 100 000 строк.
Номера DeviceId идут попорядку от 1 до 488, у каждого из них есть записи данных хоть за один день, вот их и надо выбрать.
5 мар 15, 15:02    [17347300]     Ответить | Цитировать Сообщить модератору
 Re: пропадает часть результата при MAX (Date)  [new]
Glory
Member

Откуда:
Сообщений: 104751
keen_gaff
Видимо да, наверно нет смысла сюда выкладывать около 100 000 строк.

Нужно выложить те несколько записей, которые по-вашему мнению отсутствуют
5 мар 15, 15:04    [17347323]     Ответить | Цитировать Сообщить модератору
 Re: пропадает часть результата при MAX (Date)  [new]
keen_gaff
Member

Откуда:
Сообщений: 13
да и 2012 тоже
keen_gaff,

может потому что максимальный Time у них может быть с Unit не равным 30?

выложи селект исходных данных с DeviceID=52


Запрос:
SELECT DeviceId, Time, Unit, NormValue
FROM RW_ReceivedData
WHERE DeviceId = 52


Результат:
52	2014-12-12 00:00:00.000	30	22931030.0000000000000000000
52	2014-12-12 00:00:00.000	255	2.0000000000000000000
52	2014-12-12 00:00:00.000	255	8.0000000000000000000
52	2014-12-12 00:00:00.000	27	2850.0000000000000000000
52	2014-12-13 00:00:00.000	30	22953240.0000000000000000000
52	2014-12-13 00:00:00.000	255	2.0000000000000000000
52	2014-12-13 00:00:00.000	255	0.0000000000000000000
52	2014-12-13 00:00:00.000	27	2770.0000000000000000000
52	2014-12-14 00:00:00.000	30	22974270.0000000000000000000
52	2014-12-14 00:00:00.000	255	2.0000000000000000000
52	2014-12-14 00:00:00.000	255	0.0000000000000000000
52	2014-12-14 00:00:00.000	27	2702.0000000000000000000
52	2014-12-15 00:00:00.000	30	22991580.0000000000000000000
52	2014-12-15 00:00:00.000	255	2.0000000000000000000
52	2014-12-15 00:00:00.000	255	0.0000000000000000000
52	2014-12-15 00:00:00.000	27	2608.0000000000000000000
52	2014-12-15 00:00:01.000	255	2.0000000000000000000
52	2014-12-15 00:00:01.000	255	0.0000000000000000000
52	2014-12-16 00:00:00.000	30	23009830.0000000000000000000


Вот кстати да, иногда проскакивает 2014-12-15 00:00:01.000 вместо 2014-12-15 00:00:00.000,
но я пробовал ставить в выражение WHERE сначала Unit = 30 - не помогает...
5 мар 15, 15:10    [17347371]     Ответить | Цитировать Сообщить модератору
 Re: пропадает часть результата при MAX (Date)  [new]
keen_gaff
Member

Откуда:
Сообщений: 13
Всем спасибо, разобрался...
вот с таким запросом все что есть появляется
SELECT     DeviceId, CONVERT(nvarchar(10), Time, 104) AS Data, NormValue
FROM         RW_ReceivedData AS r
WHERE     (Time =
                (SELECT     (CONVERT(nvarchar(10), MAX(Time), 104)) AS Data
                FROM          RW_ReceivedData
                WHERE      (DeviceId = r.DeviceId)
                )) AND (Unit = 30)
ORDER BY DeviceId
5 мар 15, 15:21    [17347477]     Ответить | Цитировать Сообщить модератору
 Re: пропадает часть результата при MAX (Date)  [new]
ROLpogo
Member

Откуда: Реутов
Сообщений: 219
keen_gaff,

Чтобы не потерять время, нужно условие AND Unit = 30 перенести внутрь подзапроса.
5 мар 15, 15:25    [17347516]     Ответить | Цитировать Сообщить модератору
 Re: пропадает часть результата при MAX (Date)  [new]
Glory
Member

Откуда:
Сообщений: 104751
keen_gaff
вот с таким запросом все что есть появляется

Ну так это говорит о том, что "проскакивает 2014-12-15 00:00:01.000 вместо 2014-12-15 00:00:00.000,"
и ваша конвертация просто отборосила "время"
5 мар 15, 15:28    [17347536]     Ответить | Цитировать Сообщить модератору
 Re: пропадает часть результата при MAX (Date)  [new]
keen_gaff
Member

Откуда:
Сообщений: 13
Все правильно, секунды отбросил.
А перенос Unit = 30 внутрь подзапроса ничего не давал, я так пробовал.
5 мар 15, 15:48    [17347745]     Ответить | Цитировать Сообщить модератору
 Re: пропадает часть результата при MAX (Date)  [new]
Glory
Member

Откуда:
Сообщений: 104751
keen_gaff
Все правильно, секунды отбросил.

Вы хоть поняли причину то ?
5 мар 15, 15:55    [17347801]     Ответить | Цитировать Сообщить модератору
 Re: пропадает часть результата при MAX (Date)  [new]
keen_gaff
Member

Откуда:
Сообщений: 13
Мне кажется, что последняя дата (MAX(Time)) не имела Unit = 30, вот и не попадала в выборку.
5 мар 15, 16:03    [17347885]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить