Форум: "Начинающим";
Текущий архив: 2009.06.07;
Скачать: [xml.tar.bz2];
ВнизКак вывести негруппируемое поле? Найти похожие ветки
← →
Лёша (2009-04-22 09:59) [0]Есть таблица (лог состояний машин):
ID, -- //Key
Mach,
Date,
State,
Value, -- // bit состояние 1-вкл, 0-выкл
Description
Мне надо вывести все конечные сотояния(State) машин(Mach) на последнюю дату.
Такой запрос:
SELECT
MAX([Date]) as [Date],
MachID,
StateID
FROM
MachineStateLog
GROUP BY
MachID,
StateID
выводит все состояния но без Value(включено оно или выключено) и без Description.
Как добавить в результаты Value, Description?
← →
12 © (2009-04-22 10:16) [1]как-то так можно (в рамках ыйд2000)
select
T1.command, T2.M, T2.W
from ow_LIFOWork as T1
join
(select
max(id) as M
,workend as W
from
ow_LIFOWork
Group by
id
,workend) as T2 on T1.id=T2.M
← →
Sergey13 © (2009-04-22 10:17) [2]Тут по моему бе подзапросов не обойтись, если я правильно понял задачу.
Нужно нечто вроде
SELECT *
FROM
MachineStateLog
where [date]=(SELECT MAX([Date]) FROM MachineStateLog where [date]<:LastDate)
PS: Это плохая привычка обзывать поля зарезервированными словами.
← →
Sergey13 © (2009-04-22 10:19) [3]Сори, как то так
SELECT *
FROM
MachineStateLog M1
where [date]=(SELECT MAX([Date]) FROM MachineStateLog M2 where [M2.date]<:LastDate and M1.Mach=M2.Mach)
← →
Лёша (2009-04-22 10:34) [4]Sergey13 © (22.04.09 10:19) [3]
Мне не надо вывести какое-то одно сотояние не последнюю дату.
Одновременно сотояний у каждой машины может быть несколько. Они должны отфильтроваться по условию Value = 1, и все отобразиться записями лога.
← →
12 © (2009-04-22 10:41) [5]а так что получается
select
T1.Description, T2.*
from MachineStateLog as T1
join
(
SELECT
MAX([Date]) as D,
MachID as M,
StateID as S
FROM
MachineStateLog
GROUP BY
MachID,
StateID
) as T2 on T1.MachID=T2.M
← →
Sergey13 © (2009-04-22 10:48) [6]> [4] Лёша (22.04.09 10:34)
> какое-то одно сотояние
Какой размытый критерий, не находишь?
> Одновременно сотояний у каждой машины может быть несколько.
Как это? Пример если можно. Мы ведь не знаем что там у тебя за состояния.
Вообще похоже, что ты даже словами не можешь четко сформулировать задачу прежде всего для себя.
Возможно подойдет такSELECT *
FROM
MachineStateLog M1
where [date]=(SELECT MAX([Date]) FROM MachineStateLog M2 where [M2.date]<:LastDate and M1.Mach=M2.Mach and m1.state=m2.state and m2.value=1)
← →
Лёша (2009-04-22 10:54) [7]Данные:
Дата Машина Сотояние Включено Описание
"01.01.2009" 123 "Ремонт" 1
"02.01.2009" 123 "Ремонт" 0
"05.01.2009" 123 "Ремонт" 1
"05.01.2009" 123 "Запуск" 1
"05.01.2009" 444 "Запуск" 1
"05.01.2009" 444 "Ремонт" 1
"06.01.2009" 333 "Резервация" 1
"06.01.2009" 444 "Запуск" 0
"07.01.2009" 123 "Перемещение" 1
"11.01.2009" 123 "Ремонт" 0
Вывод:
Дата Машина Сотояние Включено Описание
"05.01.2009" 123 "Запуск" 1
"07.01.2009" 123 "Перемещение" 1
"06.01.2009" 333 "Резервация" 1
"05.01.2009" 444 "Ремонт" 1
← →
Лёша (2009-04-22 10:55) [8]12 © (22.04.09 10:41) [5]
Выводит по несколько раз одни и те же сотояния. И не смотрит включено оно или нет.
← →
Лёша (2009-04-22 11:04) [9]Sergey13 © (22.04.09 10:48) [6]
Выводит записи, в которых сотояния включались. А если сотояние на LastDate было выключено, его выводить не надо.
← →
Sergey13 © (2009-04-22 11:07) [10]> [9] Лёша (22.04.09 11:04)
SELECT *
FROM
MachineStateLog M1
where [date]=(SELECT MAX([Date]) FROM MachineStateLog M2 where [M2.date]<:LastDate and M1.Mach=M2.Mach and m1.state=m2.state and m2.value=1)
and m2.value=1
← →
Лёша (2009-04-22 11:13) [11]
> SELECT *
> FROM
> MachineStateLog M1
> where [date]=(SELECT MAX([Date]) FROM MachineStateLog
> M2 where [M2.date]<:LastDate and M1.Mach=M2.Mach and m1.
> state=m2.state and m2.value=1)
> and m2.value=1
Такой не выполнится. m2 в подзапросе
← →
Sergey13 © (2009-04-22 11:51) [12]> [11] Лёша (22.04.09 11:13)
Ну блин а подумать то немного!
Мне что ли результат то нужен? Раз понял, что М2 в подзапросе, сложно попробовать М1 по смыслу подставить?SELECT *
FROM
MachineStateLog M1
where [date]=(SELECT MAX([Date]) FROM MachineStateLog M2 where [M2.date]<:LastDate and M1.Mach=M2.Mach and m1.state=m2.state and m2.value=1)
and m1.value=1
← →
Плохиш © (2009-04-22 12:01) [13]
> Sergey13 © (22.04.09 11:51) [12]
> Ну блин а подумать то немного!
Зачем думать? Здесь же подают немощным и убогим...
← →
Лёша (2009-04-22 12:30) [14]Sergey13 © (22.04.09 11:51) [12]
Вообще-то, если m2 заменить на m1, строчку "and m1.value=1" можно не писать, она ничего не меняет. В выводимых данных.
← →
Sergey13 © (2009-04-22 12:58) [15]> [14] Лёша (22.04.09 12:30)
Ну и не пиши. Я и не говорил, что отлаживал свой запрос на всех типах СУБД, о которой ты так и не сообщил пока.
Я давал направление для поиска решения.
Кстати то, что "она ничего не меняет. В выводимых данных." сомнительно. Вроде бы должна менять. Но воспроизводить у себя твою структуру и наполнять ее данными для экспериментов я не буду, сразу предупреждаю.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.06.07;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.004 c