Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.06.07;
Скачать: CL | DM;

Вниз

Как вывести негруппируемое поле?   Найти похожие ветки 

 
Лёша   (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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.01 c
15-1238616770
Артур Пирожков
2009-04-02 00:12
2009.06.07
Как вытащить звук из ютьбовского ролика?


15-1238873143
oxffff
2009-04-04 23:25
2009.06.07
Чем захватить Direct3d9?


15-1238237325
TUser
2009-03-28 13:48
2009.06.07
Ну, что, инженеры? Слабо?


15-1238840732
ZeroDivide
2009-04-04 14:25
2009.06.07
Кто-то тут по поводу труб сокрушался...


3-1222218828
РФМ
2008-09-24 05:13
2009.06.07
Наличие картинки