Форум: "Базы";
Текущий архив: 2006.06.25;
Скачать: [xml.tar.bz2];
Внизgroup by хелп Найти похожие ветки
← →
vltorax (2006-04-28 09:39) [0]select rabotnik, detal, mashina, max (data)
from remont
group by rabotnik, detal, mashina
цель получить список последих ремонтов каждой детали на каждой машине, при этом необходимо знать кто производил ремонт. в ответе на представленный выше запрос будут повторяться одинаковые ремонты произведенные в разное время если их производили разные люди. нужны только последние . Как тут это запросить (paradox tables).
заранее благодарю
← →
Johnmen © (2006-04-28 09:53) [1]
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))
← →
vltorax (2006-04-28 10:00) [2]таблица-то одна, как понимать Т1 и Т2?
← →
Johnmen © (2006-04-28 10:05) [3]Так, как предписывает стандарт SQL. Т.е. как псевдоним, он же алиас(alias).
← →
vltorax (2006-04-28 10:22) [4]хм, выдаёт ремонты с последней датой только
нужны последние ремонты по всем деталям и машинам
SELECT * FROM remont
WHERE data = (SELECT MAX(data) FROM remont
group by mashina, detal
типа того что-то надо, наверное, но конкретно это даёт ошибку
operation not aplicable
← →
Johnmen © (2006-04-28 10:25) [5]Убери в [1] условие T1.rabotnik=T2.rabotnik
← →
ЮЮ © (2006-04-28 10:28) [6]>но конкретно это даёт ошибку
конкретно в этом нет закрывающей скобки, в отличии от [1]
Выброси rabotnik из своего запроса и получишь что надо
← →
vltorax (2006-04-28 10:30) [7]тот же самый ответ
← →
vltorax (2006-04-28 10:31) [8]скобки нет только в форуме Ж)
← →
ЮЮ © (2006-04-28 10:33) [9]Выброси 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:41) [10]ага dankeshon
дело все в том и состоит что он, рабботтник этот и интересует, джёинить не получается (специфика приложения, не буду распростаняться)
нужен другой путь, если его нет - построим
← →
ЮЮ © (2006-04-28 11:23) [11]
> джёинить не получается (специфика приложения, не буду распростаняться)
даже так, как в [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
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.06.25;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c