Здравствуйте!
Помогите, пожалуйста, с запросом.
Всего-то нужно найти номера и даты создания
последних приходных накладных для выбранных артикулов.
Вообще говоря можно сделать так:
Код:
SELECT SMSPEC.ARTICLE,
SMDOCUMENTS.ID as SMDOCUMENTS_ID,
SMDOCUMENTS.CREATEDAT as SMDOCUMENTS_CREATEDAT
FROM SMDOCUMENTS,
SMSPEC,
SLSPECPACKS
WHERE SMDOCUMENTS.ID = SMSPEC.DOCID
AND SLSPECPACKS.DOCID = SMSPEC.DOCID
AND SMSPEC.SPECITEM = SLSPECPACKS.SPECITEM
AND SMDOCUMENTS.DOCTYPE IN('WI')
AND SMSPEC.ARTICLE IN('0000505', '0000496', '0000545')
ORDER BY SMDOCUMENTS.CREATEDAT DESC
и получить список документов, где они будут отсортированы по датам.
В итоге что-то вроде этого:
Код:
1 0000496 ПН64703904 20.09.2007
2 0000505 ПН64703904 12.09.2007
3 0000496 ПН25793757 30.08.2007
4 0000505 ПН25793757 30.08.2007
5 0000545 ПН02353702 23.08.2007
В примере участвуют три артикула: 0000505, 0000496, 0000545. В приведенном выше результате информация о последнем встречается только в пятой строчке. Как убрать лишние, ненужные мне строки с номерами 3, 4?
Нужного результата я могу добиться следующим запросом:
Код:
SELECT SMSPEC_ARTICLE,
SMDOCUMENTS_ID,
SMDOCUMENTS_CREATEDAT
FROM (
SELECT SMSPEC.ARTICLE as SMSPEC_ARTICLE,
SMDOCUMENTS.ID as SMDOCUMENTS_ID,
SMDOCUMENTS.CREATEDAT as SMDOCUMENTS_CREATEDAT/*,
SLSPECPACKS.VALIDDATE as SLSPECPACKS_VALIDDATE
*/
FROM SMDOCUMENTS,
SMSPEC,
SLSPECPACKS
WHERE SMDOCUMENTS.ID = SMSPEC.DOCID
AND SLSPECPACKS.DOCID = SMSPEC.DOCID
AND SMSPEC.SPECITEM = SLSPECPACKS.SPECITEM
AND SMDOCUMENTS.DOCTYPE IN('WI')
AND SMSPEC.ARTICLE IN('0000505')
ORDER BY SMDOCUMENTS.CREATEDAT DESC
)
WHERE ROWNUM = 1
UNION ALL
SELECT SMSPEC_ARTICLE,
SMDOCUMENTS_ID,
SMDOCUMENTS_CREATEDAT
FROM (
SELECT SMSPEC.ARTICLE as SMSPEC_ARTICLE,
SMDOCUMENTS.ID as SMDOCUMENTS_ID,
SMDOCUMENTS.CREATEDAT as SMDOCUMENTS_CREATEDAT/*,
SLSPECPACKS.VALIDDATE as SLSPECPACKS_VALIDDATE
*/
FROM SMDOCUMENTS,
SMSPEC,
SLSPECPACKS
WHERE SMDOCUMENTS.ID = SMSPEC.DOCID
AND SLSPECPACKS.DOCID = SMSPEC.DOCID
AND SMSPEC.SPECITEM = SLSPECPACKS.SPECITEM
AND SMDOCUMENTS.DOCTYPE IN('WI')
AND SMSPEC.ARTICLE IN('0000496')
ORDER BY SMDOCUMENTS.CREATEDAT DESC
)
WHERE ROWNUM = 1
...
Результат:
Код:
1 0000505 ПН64703904 12.09.2007
2 0000496 ПН64703904 20.09.2007
3 0000545 ПН02353702 23.08.2007
Но это решение мне не подходит, потому как предполагается выполнять запрос по группам товаров, где множество артикулов. Запрос будет просто огромным, если учесть, что все приведенное - лишь составная часть другого...
Можно ли сделать иначе?