У меня есть этот запрос
SELECT * FROM (
SELECT
wtb_orders.orderid,
wtb_orders.duration,
wtb_orders.is_renew,
wtb_orders.bundle_id,
wtb_orders.service_id,
wtb_orders.object_name,
wtb_orders.pkg_id_fk,
expires,
wtb_tokens.disconnect_time
FROM wtb_orders
JOIN wtb_tokens ON wtb_orders.orderid=wtb_tokens.orderid
WHERE
wtb_orders.username= "11111111111" AND
(
(
((expires + INTERVAL 5 DAY) >= NOW()) OR
(expires=0 AND wtb_tokens.orderid IS NOT NULL)
) OR
expires=0
)
ORDER by expires DESC
) as tmp
GROUP BY
tmp.pkg_id_fk,
tmp.bundle_id,
tmp.service_id;
Я хочу заказать по expires
, затем четко выбрать элементы, имеющие любой из tmp.pkg_id_fk, tmp.bundle_id,tmp.service_id
не нуль.
Если 2 элемента имеют то же самое bundle_id
например, я хочу выбрать тот, с более поздней датой expires
.
запрос должен работать, если я не поставлю group by
все хорошо, я использую группировать, чтобы отфильтровать дубликаты, и он решает выбрать один со старой датой истечения срока, как будто я не сортировал их.
Извините за задержку с предоставлением примера. Это пример
Итак, в первом запросе выбора я выбираю все, а во втором запросе выбора я использую группу по Просто чтобы вы могли увидеть разницу. Просто посмотрите на предметы, которые имеют pkg_id_fk = 35
Когда я делаю группу по, я ожидаю увидеть ту, у которой максимальный срок действия. Но вместо этого я вижу другую.
Причина в том, что Предположим, вы купили пакет, срок его действия истекает, поэтому вы продлили его, теперь у вас есть два дубликата пакетов. Я хочу, чтобы вы увидели самый новый.