![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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))