powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Помогите с запросом
7 сообщений из 7, страница 1 из 1
Помогите с запросом
    #35525600
ippromek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день всем, никак не могу придумать запрос - есть две таблицы:
Зарплата - Код сотрудника, Дата чека, СуммаЗарплаты
Адрес - Код сотрудника, Адрес, ДатаПереезда

В таблице Адрес хранится история адресов сотрудников , т.е. на одного сотрудника может быть несколько записей, ДатаПерезда - это дата когда он переехал на новый адрес.
Нужно написать запрос, который возвращал бы за заданный период сумму зарплаты (это легко) и адрес, который был действителен на конец периода. Никак не могу придумать условие как получить этот самый адрес. Если ставить условие ДатаПерезда<=ДатаОкончанияПериода, тогда попадают все старые адреса, пытался использовать MAX(ДатаПерезда) - не получилось
...
Рейтинг: 0 / 0
Помогите с запросом
    #35525731
ippromek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Никак не пойму почему вот такой запрос не выводит адрес:

SELECT КодСотрудника, SUM(СУммаЗарплаты) AS ESSP, b.Адрес B FROM Зарплата left outer join

(SELECT КодСотрудника, ДатаПереезда , Адрес

FROM Адрес

ORDER BY ДатаПереезда DESC

FETCH FIRST 1 ROW ONLY

) B

on a.КодСотрудника=B.КодСотрудника
where
AND a.ДатаЧека >= 01/01/2008 AND a.ДатаЧека <= 31/03/2008

GROUP BY a.КодСотрудника, b.Адрес

ORDER BY a.КодСотрудника


Ошибок не выдает, все выполняется, но поле b.Адрес пустое
...
Рейтинг: 0 / 0
Помогите с запросом
    #35526288
BuryCommoner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не претендую на правильность и быстродействие, но может так:

SELECT q2.кодсотрудника, SUM(q2.суммазарплаты), q2.датапереезда
FROM (
  SELECT z.кодсотрудника, z.суммазарплаты, q1.датапереезда
  FROM зарплата z
  LEFT JOIN (
    SELECT a.кодсотрудника, a.адрес, a.датапереезда
    FROM a.адрес
    WHERE a.датапереезда <= '2008-03-31'
    ORDER BY a.датапереезда DESC
    FETCH FIRST ROW ONLY
    ) q1 ON z.кодсотрудника = q1.кодсотрудника
  WHERE z.датачека >= '2008-01-01' AND z.датачека <= '2008-03-31'
  ) q2
GROUP BY q2.кодсотрудника, q2.датапереезда;
...
Рейтинг: 0 / 0
Помогите с запросом
    #35526332
BuryCommoner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вместо SUM MAX :)
...
Рейтинг: 0 / 0
Помогите с запросом
    #35526918
GolemXIV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Видимо, потому что как честная субд ДБ2 выдает ровно одну запись в запросе (а не по одной на каждого сотрудника, как Вам хотелось):

(SELECT КодСотрудника, ДатаПереезда , Адрес
FROM Адрес
ORDER BY ДатаПереезда DESC
FETCH FIRST 1 ROW ONLY
)
...
Рейтинг: 0 / 0
Помогите с запросом
    #35527037
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select a.КодСотрудника, a.ESSP, d.Адрес
from (
SELECT КодСотрудника, SUM(СУммаЗарплаты) AS ESSP
FROM Зарплата 
where ДатаЧека >= '2008-01-01' AND ДатаЧека <= '2008-03-31'
GROUP BY КодСотрудника
) a
left join (
select c.КодСотрудника, c.Адрес
from (
select КодСотрудника, max(ДатаПереезда) ДатаПереезда
FROM Адрес
where ДатаПереезда<='2008-03-31'
group by КодСотрудника
) b
join Адрес c on c.КодСотрудника=b.КодСотрудника and c.ДатаПереезда=b.ДатаПереезда
) d on a.КодСотрудника=d.КодСотрудника
ORDER BY a.КодСотрудника
...
Рейтинг: 0 / 0
Помогите с запросом
    #35528528
ippromek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
thanks Mark, это работает :)
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Помогите с запросом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]