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

Откуда: Msk
Сообщений: 85
Как это сделать?
Крыша к вечеру пятницы едет совсем (.
Можно пнуть просто в нужное место ФАК-а или ветку в форуме.
А может кто-нить кратко объяснит как это сделать?
26 июн 09, 17:30    [7349687]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к 175 таблицам. Результат - строка в 175 полей.  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
select
   (select top 1 field from table1 where ... order by ... ) as field1
  ,(select top 1 field from table2 where ... order by ... ) as field2
...
  ,(select top 1 field from table175 where ... order by ... ) as field175
26 июн 09, 17:35    [7349722]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к 175 таблицам. Результат - строка в 175 полей.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36803
175 полей в результате запроса? Может, пора пойти отдохнуть до понедельника?
26 июн 09, 17:40    [7349765]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к 175 таблицам. Результат - строка в 175 полей.  [new]
avorsa
Member

Откуда: Msk
Сообщений: 85
Гавриленко Сергей Алексеевич
175 полей в результате запроса? Может, пора пойти отдохнуть до понедельника?

в среду уже сдаваться надо )
да, 175 полей (
без вариантов
26 июн 09, 17:44    [7349791]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к 175 таблицам. Результат - строка в 175 полей.  [new]
avorsa
Member

Откуда: Msk
Сообщений: 85
Select
	(select top 1 StringTime, [kVAh TOTAL]*3 AS [kVAh TOTAL]
		from
		(
			select min(StringTime) date
			from [PAS].[dbo].[H01.03D]
			group by datediff(day, 0, StringTime)
		) t1
		join [PAS].[dbo].[H01.03D] on t1.date = [PAS].[dbo].[H01.03D].StringTime
		where StringTime > dateadd (dd, -1, getdate())) AS [kVAh TOTAL 1]
   ,(select top 1 StringTime, [kVAh TOTAL]*3 AS [kVAh TOTAL]
		from
		(
			select min(StringTime) date
			from [PAS].[dbo].[H01.03E]
			group by datediff(day, 0, StringTime)
		) t1
		join [PAS].[dbo].[H01.03E] on t1.date = [PAS].[dbo].[H01.03E].StringTime
		where StringTime > dateadd (dd, -1, getdate())) AS [kVAh TOTAL 2]
на это мы ругаемся вот так
Msg 116, Level 16, State 1, Line 1
Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.
Msg 116, Level 16, State 1, Line 1
Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.
видно из-за вложенного селекта
где-то нехватает EXISTS, как я понимаю...
26 июн 09, 17:47    [7349821]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к 175 таблицам. Результат - строка в 175 полей.  [new]
Glory
Member

Откуда:
Сообщений: 104760
Подзапрос должен возвращать 1 поле
26 июн 09, 17:48    [7349826]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к 175 таблицам. Результат - строка в 175 полей.  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
avorsa
	(select top 1 StringTime, [kVAh TOTAL]*3 AS [kVAh TOTAL]
С чего Вы взяли что там можно 2 поля select-ить ? Я этого не говорил! Только одно
26 июн 09, 17:50    [7349839]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к 175 таблицам. Результат - строка в 175 полей.  [new]
avorsa
Member

Откуда: Msk
Сообщений: 85
Glory
Подзапрос должен возвращать 1 поле

ых
теперь вопрос
как выбрать строку с минимальным значением StringTime за предыдущий день?
26 июн 09, 17:50    [7349840]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к 175 таблицам. Результат - строка в 175 полей.  [new]
Senya_L
Member

Откуда: Москва
Сообщений: 5381
avorsa,

Ну Вы и напроектировали...
26 июн 09, 17:51    [7349845]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к 175 таблицам. Результат - строка в 175 полей.  [new]
avorsa
Member

Откуда: Msk
Сообщений: 85
Паганель
avorsa
	(select top 1 StringTime, [kVAh TOTAL]*3 AS [kVAh TOTAL]
С чего Вы взяли что там можно 2 поля select-ить ? Я этого не говорил! Только одно

сори уточняю
175 значений + поле с датой.
26 июн 09, 17:51    [7349850]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к 175 таблицам. Результат - строка в 175 полей.  [new]
Glory
Member

Откуда:
Сообщений: 104760
avorsa
Glory
Подзапрос должен возвращать 1 поле

ых
теперь вопрос
как выбрать строку с минимальным значением StringTime за предыдущий день?

Да как угодно. Важно чтобы в SELECT был указан только один столбец
26 июн 09, 17:52    [7349855]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к 175 таблицам. Результат - строка в 175 полей.  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
avorsa
как выбрать строку с минимальным значением StringTime
top 1 нужно применить в связке с order by
(как я и показывал)

avorsa
за предыдущий день?
Это нужно указать в where
26 июн 09, 17:52    [7349858]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к 175 таблицам. Результат - строка в 175 полей.  [new]
avorsa
Member

Откуда: Msk
Сообщений: 85
Паганель
avorsa
как выбрать строку с минимальным значением StringTime
top 1 нужно применить в связке с order by
(как я и показывал)

avorsa
за предыдущий день?
Это нужно указать в where

вот и как это описать?
раньше была конструкция со вложенным селектом и последующим join.
26 июн 09, 20:10    [7350326]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к 175 таблицам. Результат - строка в 175 полей.  [new]
avorsa
Member

Откуда: Msk
Сообщений: 85
кто-нить подскажет,
как в where записать условие поиска минимального значения времени за прошедшие сутки.
конструкция со вложенным селектом не подходит для моей задачи.
нужно как-то проще...
29 июн 09, 12:18    [7354113]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к 175 таблицам. Результат - строка в 175 полей.  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Автор, по-моему, мы зашли в тупик
Перечитав все еще раз, я так и не понял, что же у Вас за задача и какие у Вас с ней трудности

Давайте зайдем с другой стороны
Для начала ограничимся парой-тройкой полей вместо 175
Потом выполните Рекомендации по оформлению сообщений в форуме, пункты 6 и 4
Затем попробуем решить такую "упрощенную" задачу
И только после этого Вы сами распространите это решение на реальную задачу с 175 полями
29 июн 09, 12:38    [7354217]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к 175 таблицам. Результат - строка в 175 полей.  [new]
avorsa
Member

Откуда: Msk
Сообщений: 85
ОК
имеем след.
Microsoft SQL Server  2000 - 8.00.760 (Intel X86)   Dec 17 2002 14:22:05   Copyright (c) 1988-2003 Microsoft Corporation  Desktop Engine on Windows NT 5.1 (Build 2600: Service Pack 3) 
Есть таблицы со след. структурой
CREATE TABLE [dbo].[H01.03D](
	[DoubleTime] [float] NULL,
	[StringTime] [datetime] NULL,
	[Trigger] [float] NULL,
	[Sequence] [int] NULL,
	[V1] [float] NULL,
	[I1] [float] NULL,
	[kW] [float] NULL,
	[kWh IMPORT] [float] NULL,
	[kVAh TOTAL] [float] NULL,
	[PF] [float] NULL,
) ON [PRIMARY]
пример наполнения таблицы.
1242831300000	2009-05-20 14:55:00.000	1	4031	224	71,51	13,264	3458,2	3525,5	0,989
1242831600000	2009-05-20 15:00:00.000	1	4032	223,8	72,08	13,36	3459,4	3526,6	0,988
1242831900000	2009-05-20 15:05:00.000	1	4033	224,4	71,86	13,373	3460,5	3527,7	0,989
1242832200000	2009-05-20 15:10:00.000	1	4034	224,2	70,19	13,086	3461,6	3528,8	0,99
Для дальнейшей работы мне нужны 2 поля.
StringTime - в котором хранятся время появления записи
и
[kVAh TOTAL] - потребленная электроэнергия с нарастающим итогом.

При нормальной работе системы данные в таблице лежат с 5-минутными интервалами, начиная с 00:00:00.000 каждые сутки. При отключении приборов на неопр. время записи могут появится не только в 00:00:00.000.

На выходе хочу получить таблицу вида
Дата              [kVAh TOTAL]
yyyy:mm:dd           Значение

в которую будут складываться значение электроэнергии с нарастающим итогом за сутки.
как-то так.
29 июн 09, 12:57    [7354315]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к 175 таблицам. Результат - строка в 175 полей.  [new]
avorsa
Member

Откуда: Msk
Сообщений: 85
и еще.
это задача запихивается в job, который выполняется ночью в 00.15 и потому работает всегда со свежими данными за предыдущие сутки.
29 июн 09, 13:00    [7354324]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к 175 таблицам. Результат - строка в 175 полей.  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
avorsa
На выходе хочу получить таблицу вида
Дата              [kVAh TOTAL]
yyyy:mm:dd           Значение

Не понял, там одна строка должна быть

или все-таки
avorsa
с нарастающим итогом за сутки.
?

ЗЫ если бы Вы привели желаемый результат, а не "таблицу вида", я бы этот вопрос не задавал
29 июн 09, 13:07    [7354364]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к 175 таблицам. Результат - строка в 175 полей.  [new]
avorsa
Member

Откуда: Msk
Сообщений: 85
Прошу прощение ).
На выходе хочу получить следующее:
Дата         [kVAh TOTAL 1]       [kVAh TOTAL 2]..............   [kVAh TOTAL 175]
2009-06-25           111                   354                             100
2009-06-26           115                   687                             224
2009-06-27           120                   888                             385
2009-06-28           121                   004                             454
29 июн 09, 13:16    [7354400]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к 175 таблицам. Результат - строка в 175 полей.  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
avorsa
На выходе хочу получить таблицу вида
Дата              [kVAh TOTAL]
yyyy:mm:dd           Значение
-- test data
declare @H01_03D table([StringTime] datetime, [kVAh TOTAL] float)
insert into @H01_03D([StringTime], [kVAh TOTAL])
select '20090520 14:55:00', 3525.5 union all
select '20090520 15:00:00', 3526.6 union all
select '20090520 15:05:00', 3527.7 union all
select '20090520 15:10:00', 3528.8
-- end of test data

select cast(convert(varchar(8), [StringTime], 112) as datetime) as [Дата]
      ,sum([kVAh TOTAL]) as [kVAh TOTAL]
  from @H01_03D
 group by convert(varchar(8), [StringTime], 112)

Дата                    kVAh TOTAL
----------------------- ----------------------
2009-05-20 00:00:00.000 14108.6

(1 row(s) affected)
29 июн 09, 13:17    [7354405]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к 175 таблицам. Результат - строка в 175 полей.  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
avorsa
На выходе хочу получить следующее:
Дата         [kVAh TOTAL 1]       [kVAh TOTAL 2]..............   [kVAh TOTAL 175]
2009-06-25           111                   354                             100
2009-06-26           115                   687                             224
2009-06-27           120                   888                             385
2009-06-28           121                   004                             454
Да как же, если Вы в тестовые данные включили только 20-е мая
Вот напишу я какой-то вариант решения, как я проверю, сходятся ли цифры?
А Вы как проверите?

И давайте все-таки остановимся на [kVAh TOTAL 2] или [kVAh TOTAL 3], а до 175 Вы уж сами, потом
29 июн 09, 13:20    [7354422]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к 175 таблицам. Результат - строка в 175 полей.  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
Нда... лучше переработать табличку...

например у вас [kVAh TOTAL N] появится новый счетчик и станет [kVAh TOTAL N+1] - и что сразу повод менять схему? для этого вызвать разработчиков? Надеюсь сдаете не заказчику, а зачет... хотя я и зачет бы за такое не поставилбы!


Это все замечательно влезает в таблицу из 3-4 полей + небольшая таблица справочник
29 июн 09, 13:29    [7354444]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к 175 таблицам. Результат - строка в 175 полей.  [new]
avorsa
Member

Откуда: Msk
Сообщений: 85
безусловно остановимся на [kVAh TOTAL 1] и [kVAh TOTAL 2] )
поскольку данные идут с нарастающим итогом, то мне нет необходимости их суммировать.
Мне нужен, фактически, "срез данных", для которых StringTime минимальный в течении предыдущих суток. (как правило 00:00:00.000, но может быть и другим, потому и ищем минимальное значение времени).

автор
Да как же, если Вы в тестовые данные включили только 20-е мая
Вот напишу я какой-то вариант решения, как я проверю, сходятся ли цифры?
А Вы как проверите?

мне принцип понять и код )
а проверить я смогу на своих базах.
Для ВАшего удобства предоставляю вот
2009-06-26 13:35:00.000	9684,5
2009-06-26 13:40:00.000	9685,1
2009-06-26 13:45:00.000	9685,7
2009-06-26 13:50:00.000	9686,2
2009-06-26 13:55:00.000	9686,8
2009-06-26 14:00:00.000	9687,4
2009-06-26 14:05:00.000	9688
2009-06-26 14:10:00.000	9688,5
2009-06-26 14:15:00.000	9689,1
2009-06-26 14:20:00.000	9689,7
29 июн 09, 13:31    [7354456]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к 175 таблицам. Результат - строка в 175 полей.  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
avorsa
Для ВАшего удобства предоставляю вот
+ данные
2009-06-26 13:35:00.000	9684,5
2009-06-26 13:40:00.000	9685,1
2009-06-26 13:45:00.000	9685,7
2009-06-26 13:50:00.000	9686,2
2009-06-26 13:55:00.000	9686,8
2009-06-26 14:00:00.000	9687,4
2009-06-26 14:05:00.000	9688
2009-06-26 14:10:00.000	9688,5
2009-06-26 14:15:00.000	9689,1
2009-06-26 14:20:00.000	9689,7
И какой результат должен быть на этих данных?
29 июн 09, 13:33    [7354464]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к 175 таблицам. Результат - строка в 175 полей.  [new]
avorsa
Member

Откуда: Msk
Сообщений: 85
SanyL
Нда... лучше переработать табличку...

например у вас [kVAh TOTAL N] появится новый счетчик и станет [kVAh TOTAL N+1] - и что сразу повод менять схему? для этого вызвать разработчиков? Надеюсь сдаете не заказчику, а зачет... хотя я и зачет бы за такое не поставилбы!
Это все замечательно влезает в таблицу из 3-4 полей + небольшая таблица справочник


Новый счетчик не появится без нашего ведома.
Не зачет, что печально - ибо ситуевина сложилась тяжкая и приходится выкручиваться из того что есть ( (это отдельная тема для оффтопа).
29 июн 09, 13:35    [7354472]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить