MySQL:在我的情况下需要查询帮助吗

MySQL:在我的情况下需要查询帮助吗,mysql,Mysql,我的公司在客户端桌面上安装了应用程序。应用程序将以total\u单击的方式向服务器发送已安装桌面上运行的每个软件的数据。我想知道按日期范围过滤的特定软件的点击次数 问题是,应用程序总是带有“total\u click”值(每个客户端都带有不同的total\u click)。例如,在第一天,软件A有10次点击,而在第二天,只运行一次的软件A将向服务器发送11次点击总数。所以,为了获得第2天的总点击量的有效数据,我需要用第1天的总点击量减去第2天的总点击量。我知道这让人困惑,但我也很难解释这个问题

我的公司在客户端桌面上安装了应用程序。应用程序将以total\u单击的方式向服务器发送已安装桌面上运行的每个软件的数据。我想知道按日期范围过滤的特定软件的点击次数

问题是,应用程序总是带有“total\u click”值(每个客户端都带有不同的total\u click)。例如,在第一天,软件A有10次点击,而在第二天,只运行一次的软件A将向服务器发送11次点击总数。所以,为了获得第2天的总点击量的有效数据,我需要用第1天的总点击量减去第2天的总点击量。我知道这让人困惑,但我也很难解释这个问题

表结构示例 表数据示例 ms\u单击

Click_ID    Client_ID    Software_ID    Total_Click    Date
1           1            1                      100    01/04/2015
2           2            1                       10    01/04/2015
3           3            1                     1000    01/04/2015
  
4           1            1                      120    02/04/2015
5           2            1                       20    02/04/2015

6           2            1                       40    03/04/2015
7           3            1                     1100    03/04/2015

4           1            1                      150    04/04/2015
5           2            1                       50    04/04/2015
5           3            1                     1200    04/04/2015
如您所见,在4月1日至4日期间,很容易获得总点击次数。我所要做的就是在4月4日用SUMtotal\u click减去4月1日的SUMtotal\u click

但是我怎样才能在4月1日和4月2日之间获得点击总数?在4月2日,客户端id3不发送任何数据,因此,如果我在4月2日用SUMtotal\u click减去SUMtotal\u click,则在4月1日它将返回负结果(根据数据示例,它应返回30)


再一次,如果让人困惑,我很抱歉。感谢您的帮助。

由于给定(
客户端id
应用程序id
)的
总点击次数从未减少,因此您可以根据每个客户端和每个应用程序确定有效点击次数,如下所示:

select client_id, software_id, MAX(total_click) as total_click
from ms_click
where date <= $target_date
group by client_id, software_id

LEFT JOIN
(以及外部选择列表中的
COALESCE()
)说明了在“开始”日期(解释为0)之前,某些软件可能没有点击报告。当然,您需要向查询提供特定的“到”和“从”日期。

不确定您要的是什么,但我猜:

SELECT t.*, COALESCE(t.total_click-MAX(t1.Total_Click),t.total_click) as clicks
FROM ms_click t 
LEFT JOIN ms_click t1
ON t.client_id=t1.client_id
  AND t.`date`>t1.`date`
GROUP BY t.client_id, t.`date`

您能发布一个您期望的查询输出的示例吗?您的描述令人困惑,因为它暗指聚合
SUM()
,但也指日期之间的减法
SUM()
通常不进行任何减法,在
中用
限制日期,在
中,其中
从上面的数据示例来看,“SUM()”在4月1日和4月2日之间单击的有效结果是30,4月1日和4月3日的有效结果是130,依此类推。哇,它工作得很好!谢谢!虽然查询需要2-3分钟(ms_click有100-200万行),但我认为我可以自己修复它。
select
  to_stats.client_id,
  to_stats.software_id,
  to_stats.total_click - coalesce(from_stats.total_click, 0)
from (
    select client_id, software_id, MAX(total_click) as total_click
    from ms_click
    where date <= $from_date
    group by client_id, software_id
  ) to_stats
  left join (
    select client_id, software_id, MAX(total_click) as total_click
    from ms_click
    where date <= $to_date
    group by client_id, software_id
  ) from_stats
    on from_stats.client_id = to_stats.client_id
      and from_stats.software_id = to_stats.software_id
SELECT t.*, COALESCE(t.total_click-MAX(t1.Total_Click),t.total_click) as clicks
FROM ms_click t 
LEFT JOIN ms_click t1
ON t.client_id=t1.client_id
  AND t.`date`>t1.`date`
GROUP BY t.client_id, t.`date`