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

Вниз

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

Наверх




Память: 0.49 MB
Время: 0.042 c
15-1149150033
RA
2006-06-01 12:20
2006.06.25
Перезд в столицу? (Киев)


3-1146110130
Insane SPIRIT
2006-04-27 07:55
2006.06.25
После SQL-запроса Table1 недоступна!


15-1149178238
Зм1й
2006-06-01 20:10
2006.06.25
Принтер Epson Photo R800


15-1148828917
redlord
2006-05-28 19:08
2006.06.25
игры для мобил


5-1134398300
Domkrat
2005-12-12 17:38
2006.06.25
ScrollBar width