Przeniesienie zapytania ze starego MySQL-a

0

Hej mam w systemie następującą strukturę:
tabela company - z firmami
tabela product - tutaj produkty
tabele połączone są wiele do wielu tabelą comapny_products w której prócz id produktu i id firmy przechowywana jest także data wygaśnięcia produktu i ilość produktu
Stary system działa na mysql-u w którym zapytanie do pobierania danych z tych tabel skonstruowane jest mniej więcej tak:

SELECT 
 company.id, 
 company.name,
(SELECT product.name FROM comapny_products LEFT JOIN products_names ON comapny_products.product = product.id WHERE comapny_products.company =company.id ORDER BY comapny_products.date_end ASC limit 1) as products_companies_name,

(SELECT MIN(comapny_products.date_end) FROM comapny_products LEFT JOIN product ON comapny_products.product = product.id WHERE comapny_products.company = company.id) as date_end, 

(SELECT SUM(quantity) FROM comapny_products WHERE comapny_products.company = company.id) as quantity,
company.phone_main,
company.zip, 
company.city,
   FROM company LEFT JOIN states ON companies.state_id = states.state_id LEFT JOIN users ON companies.supervisor_id = users.user_id LEFT JOIN groups ON companies.group_id = groups.groups_id
tutaj mogą być jakieś whery
GROUP BY company.id

Niestety jest to jakaś głupia wersja mysql-a w której można zrobić takiego debilnego GROUP BY. Generalnie zapytanie działa dość magicznie - jeśli nie ma żadnych warunków typu where to wyświetlane są pojedyncze rekordy każdej z firm - ten magiczny group by je scala. Jeśli natomiast jest warunek where np po dacie to wyświetlane są produkty firmy które kończą się w określonej dacie.
Przykład:
lista gówna:
FirmaA produktA 2018-03-02
FirmaB produktA 2016-05-02
po filtrowaniu po dacie rekordy są takie:
FirmaA produktB 2017-02-02
FirmaB produktC 2017-02-02
ponieważ firma A i B mają produkty które kończą się w tej dacie.
Pytanie brzmi jak przenieść takie zapytanie do normalnego silnika sql - gdzie nie można używać group by w taki sposób jak powyżej przy jednoczesnym zachowaniu takiej samej funkcjonalności jeśli chodzi o wyszukiwanie po dacie ?

0

sqlfiddle.com - DDL tabel i dane bo wątpię aby komukolwiek się chciało odszyfrowywać to magiczne zapytanie

0

Rozpisz sobie po kolei spokojnie wszystko na karteczce i zobaczysz że kompilator robi dokładnie to co mu każesz. Ja ostatnio spotkałem się z sytuacją kiedy mój kolega stworzył zapytanie gdzie kompilator puścił zapytanie i nie krzyknął żadnego błędu w sytuacji gdzie w group by było inne pole niż w select (co zawsze było złotą zasadą). Zapytanie uruchamiało się ale oczywiście zwracało inne wyniki niż potrzeba. Czasami do analizy potrzeba spokoju, długopisu i karteczki :)
Jak napisał abrakadaber wrzuć jakiś schemacik i dane :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1