Я отслеживаю цены на игры в нескольких магазинах.У меня есть таблица games
:
id | title | platform_id
---|-------------|-----------
1 | Super Mario | 1
2 | Tetris | 3
3 | Sonic | 2
a stores
таблица:
id | title
---|-------------
1 | Target
2 | Amazon
3 | EB Games
и таблица copies
с одной записью для копии цели данной игры, одназапись для Amazon и т. д. Я сохраняю SKU, чтобы использовать его при очистке их веб-сайтов.
game_id | store_id | sku
--------|----------|----------
1 | 2 | AMZ-3F4YK
1 | 3 | 001481
Я запускаю одну очистку в день, неделю или даже дольше и сохраняю результат в виде центов вprices
таблица:
sku | price | time
----------|---------|------
AMZ-3F4YK | 4010 | 13811101
001481 | 3210 | 13811105
Плюс таблица платформ, которая просто сопоставляет идентификаторы с именами.
Вот где я запутался и застрял.
Я хочу выпуститьзапрос, который выбирает каждую игру, плюс ее последнюю цену в каждом магазине.Таким образом, это приведет к чистым результатам, таким как
games.title | platform_name | info
------------|---------------|------
Super Mario | NES | EB Games,1050;Amazon,3720;Target,5995
Tetris | Game Boy | EB Games,3720;Amazon,410;Target,5995
Моя лучшая попытка на данный момент -
select
games.title as title,
platforms.name as platform,
group_concat(distinct(stores.name) || "~" || prices.price) as price_info
from games
join platforms on games.platform_id = platforms.id
join copies on copies.game_id = games.id
join prices on prices.sku = copies.sku
join stores on stores.id = copies.store_id
group by title
. К каким сетям относятся результаты, такие как
Super Mario | NES | EB Games~2300,Target~2300,Target~3800
, то есть включает каждую цену.в списке, когда я хочу только один в магазине (и чтобы он был самым последним).Выяснение того, как интегрировать подзапрос «выбрать цену, где id = (выберите идентификатор из max (time) ...») и т. Д., Полностью обескуражило меня всю ночь, и я был бы признателен за любой совет, который кто-нибудь мог бы мне предложить.
Я использую SQLite, но если в Postgres есть лучший вариант, я мог бы сделать это там.