Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1240234324
NGPOL
2009-04-20 17:32
2009.06.07
Клиент-сервер на DCOM. AppendRecord не работает


15-1238586006
Interior
2009-04-01 15:40
2009.06.07
Блокировка порносайтов


2-1240384955
Лёша
2009-04-22 11:22
2009.06.07
Как организовать данные?


8-1194703672
Марсель
2007-11-10 17:07
2009.06.07
Размазывание!


2-1240310234
D@nger
2009-04-21 14:37
2009.06.07
Вызов процедур MDI форм





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский