Цитата: konst ➤ А почему нельзя??
...
можно. нашел, чутка подправил. рисовалось когда-то на коленке, по принципу: чего-то посчитал - и ладно. как есть сейчас, у меня неделю по сети считает почти шесть минут (~200тыс.чеков, ~миллиона позиций).
ну и все пары вылезают по два раза: огурцы-помидоры, следом помидоры-огурцы. даже думать лениво, чего с этим делать
кому надо красиво и быстро - делайте сами. :)
Код:
select a1, a2, count(*), c1.shortname as n1, c2.shortname as n2
from smcard c1, smcard c2,
(select i1.article as a1, i2.article as a2
from smcashcheckitems i1, smcashcheckitems i2, smcashz z
where i1.locid=i2.locid
and i1.desknum=i2.desknum
and i1.znum=i2.znum
and i1.checknum=i2.checknum
and NOT i1.item=i2.item
and NOT i1.article=i2.article
and NOT i1.article in (select article from smcard c where c.idclass=(select ID from svcardtreesplit a where a.name like 'Проч%' and a.Item2 is null))
and NOT i2.article in (select article from smcard c where c.idclass=(select ID from svcardtreesplit a where a.name like 'Проч%' and a.Item2 is null))
and i1.locid=z.locid
and i1.desknum=z.desknum
and i1.znum=z.znum
and z.closedate>=to_date('08.08.2011','DD.MM.YYYY')
and z.closedate<=to_date('14.08.2011','DD.MM.YYYY')) p
where c1.article=a1 and c2.article=a2
group by a1, a2, c1.shortname, c2.shortname
having count(*)>700
order by count(*) desc
две строки вида
and NOT i1.article in (select article from smcard c where c.idclass=(select ID from svcardtreesplit a where a.name like 'Ïðî÷%' and a.Item2 is null))
это исключение группы пакетов и прочего мусора.
строка
and NOT i1.article=i2.article
убирает повторения товаров внутри чеков.
с этим ограничением у меня на первом месте огурцы+помидоры с огромным отрывом. без него: сахар+сахар, окорочек+окорочек...