【问题标题】:Selecting newest row by date with interval and groupping by the client ID (MySQL)按日期选择最新行并按客户端 ID 分组(MySQL)
【发布时间】:2019-07-01 19:52:14
【问题描述】:

我一直在尝试为客户选择一个(该)最新条目(将由 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

我需要为每个客户端找到最新的条目,最高的“PO”编号*,并检查这是否属于间隔(稍后将更改为“等于”,以准确获取输出10 天前、30 天前或 365 天前(取决于客户)。

这是我希望看到的:

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

它也需要永远......

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

.

.

.

.

`

* Przed /zmiana /po

意思是:

之前/改变/之后

【问题讨论】:

  • PHP 不是我的强项,但你为什么还要用 php 标记它?

标签: php mysql group-by unique intervals


【解决方案1】:

据我所知,您需要 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,尽管看起来两者都会有结果在这种特殊情况下

【讨论】:

  • 谢谢您,Gary,您的意见。我的大脑可能无法像往常一样工作,所以我有另一个(愚蠢的)问题:在运行第一个查询之后,我究竟该如何运行“then”(加入)?我真的认为这将是一件容易的事......
  • 第二个查询是一个例子。我已将第一个查询设为别名为“B”的子查询。我将 A 连接到 B,因此您将它们并排放置,而不是按顺序排列。您可以从那里添加任何需要的计算。
猜你喜欢
  • 2015-09-08
  • 2012-09-26
  • 1970-01-01
  • 2021-08-28
  • 1970-01-01
  • 2012-07-15
  • 2020-11-16
  • 1970-01-01
  • 2015-06-01
相关资源
最近更新 更多