按日期选择具有间隔的最新行,并按客户端ID分组(MySQL)

时间:2019-07-01 19:52:14

标签: php mysql group-by unique intervals

我一直在尝试为客户选择一个(最新的)条目(它将由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”编号*,并检查是否落入间隔内(inverval稍后将更改为“等于”,以准确地从10天前,30天前或365天前(取决于客户)。

这是我想看到的:

enter image description here

当我添加“ group by”子句时,它确实将其分组,是的,只是不是我想要的方式:

enter image description here

这也需要永远...

什么是正确的sql,您能帮我吗?

`

* Przed / zmiana / po

表示:

在/ change /之后

之前

1 个答案:

答案 0 :(得分:0)

从我看来,您需要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,尽管在这种情况下,两者看起来都可以得到结果