Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

group by хелп [D7, Paradox]


vltorax ©   (2006-04-28 09:39:00) 

select rabotnik, detal, mashina, max (data)
from remont
group by rabotnik, detal, mashina

цель получить список последихремонтов каждой детали на каждой машине, при этом необходимо знать кто производил ремонт. в ответе на представленный выше запрос будут повторяться одинаковыеремонты произведенные в разное время если их производили разные люди. нужны только последние. Как тут это запросить (paradox tables).
заранее благодарю


ЮЮ   (2006-04-28 11:23:00) [1]


> джёинить не получается (специфика приложения, не буду распростаняться)

даже так, как в [9]? :)

Чисто запросом можно ответить на вопрос "когда последний раз ремонтировалась  любая деталь на любом станке: (1)

select mashina, detal, max (data) data
from remont
group by mashina, detal

а чтобы найти все записи из remont, надо теперь соединить этот запрос с таблицей по трем полям:

Select  remont.* r
FROM
 ( select mashina, detal, max (data) data
   from remont
  group by mashina, detal ) lr
JOIN remont r ON  
   (r.detal=lr.detal) AND (r.mashina=lr.mashina) AND  (r.data=lr.data)

Так мы получим те записи, что обусловили результат запроса (1)

Но синтаксис Local SQL не позволяет использоват подзапросы как таблицы.
Однако BDE позволет оформить подзапрос в виде тектового файла и использовать уже его (см. Local View).

>нужен другой путь, если его нет - построим


Вперед  в цикле по правильно отсортированной таблице remont


vltorax   (2006-04-28 10:41:00) [2]

ага dankeshon
дело все в том и состоит что он, рабботтник этот и интересует, джёинить не получается (специфика приложения, не буду распростаняться)
нужен другой путь, если его нет - построим


ЮЮ   (2006-04-28 10:33:00) [3]

Выброси rabotnik из своего запросаи получишь что надо

Если же работник всё-таки интересует, то к результату надо Join-ить таблицу:

Select  remont.* r
FROM
 "lastRemont.sql" lr
 JOIN remont r ON  (r.detal=lr.detal) AND (r.mashina=lr.mashina)


vltorax   (2006-04-28 10:31:00) [4]

скобки нет только в форуме Ж)


vltorax   (2006-04-28 10:30:00) [5]

тот же самый ответ


ЮЮ   (2006-04-28 10:28:00) [6]

>но конкретно это даёт ошибку
конкретно в этом нет закрывающей скобки, в отличии от [1]

Выброси rabotnik из своего запроса и получишь что надо


Johnmen   (2006-04-28 10:25:00) [7]

Убери в [1] условие T1.rabotnik=T2.rabotnik


vltorax   (2006-04-28 10:22:00) [8]

хм, выдаёт ремонты с последней датой только
нужны последние ремонты по всем деталям и машинам

SELECT * FROM remont
WHERE data = (SELECT MAX(data) FROM remont
                     group by mashina, detal
типа того что-то надо, наверное, но конкретно это даёт ошибку
operation not aplicable


Johnmen   (2006-04-28 10:05:00) [9]

Так, как предписывает стандарт SQL. Т.е. как псевдоним, он же алиас(alias).


vltorax   (2006-04-28 10:00:00) [10]

таблица-то одна, как понимать Т1 и Т2?


Johnmen   (2006-04-28 09:53:00) [11]

SELECT * FROM Table T1
WHERE T1.data = (SELECT MAX(T2.data) FROM Table T2
                         WHERE (T1.rabotnik=T2.rabotnik) AND (T1.detal=T2.detal) AND (T1.mashina=T2.mashina))


Наверх

Титульная страница Поиск, карта сайта Написать письмо