Выбор новейшей строки по дате с интервалом и группировка по идентификатору клиента (MySQL) - PullRequest
0 голосов
/ 01 июля 2019

Я пытался выбрать (НОВУЮ) запись для клиента (которая будет запускаться плагином WP, sorta cron), который, как я думал, будет работать 5 минут.Через четыре часа я здесь, обращаюсь к вам за помощью.

Чтобы визуализировать результаты и проблему:

SELECT * FROM `foc_program_partnerski_historia` 
    WHERE `data` >= SUBDATE('2019-06-30 00:01:00', INTERVAL 10 DAY) 
    AND `zmiana` NOT LIKE '-%' 
ORDER by main_id, `data` DESC

enter image description here

Мне нужно найти самую новую запись, наибольшее число 'PO' *, для каждого клиента и проверить, попадает ли это в интервал (позже инверсия будет изменена на "равно", чтобы точно получить результат от 10 днейназад, 30 дней назад или 365 дней назад (это будет зависеть от клиента).

Это то, что я хотел бы видеть:

enter image description here

Когда я добавляю предложение group by, оно группирует его, да, просто не так, как мне бы хотелось:

enter image description here

и это тоже требует вечности ...

Каким должен быть правильный sql, можете ли вы мне помочь?

.

.

.

.

`

* Przed / zmiana / po

означает:

до / изменить / после

1 Ответ

0 голосов
/ 01 июля 2019

Из того, что я вижу, вам нужно GROUP BY main_id.Начните с чего-то вроде

SELECT main_id, max(data) AS data, max(przed) AS przed, min(po) AS po
FROM `foc_program_partnerski_historia` 
    WHERE `data` >= SUBDATE('2019-06-30 00:01:00', INTERVAL 10 DAY) 
    AND `zmiana` NOT LIKE '-%' 
GROUP BY main_id
ORDER BY main_id

, затем вы можете присоединиться к этому следующим образом:

SELECT *
FROM `foc_program_partnerski_historia` A
LEFT JOIN (
  SELECT main_id, max(data) AS data, max(przed) AS przed, min(po) AS po
  FROM `foc_program_partnerski_historia` 
      WHERE `data` >= SUBDATE('2019-06-30 00:01:00', INTERVAL 10 DAY) 
      AND `zmiana` NOT LIKE '-%' 
  GROUP BY main_id
) B
ON A.main_id = B.main_id AND A.przed=B.po -- OR A.data<>B.data
ORDER BY A.main_id

и я использую max (data), а не przed, основываясь на том, что вы выделили, хотяпохоже, что любой из них будет иметь результаты в данном конкретном случае .

...