每天如何提取不同的最后触摸值的方法

时间:2018-09-06 07:31:09

标签: mysql sql

快速概述;设想一个场景,其中只有1个ID(让我们将其称为123)应该仅触发1个事件(让我们将其称为AAA),但是由于应用程序的性质,ID 123每5天触发一次事件AAA,实际上1个ID仅应有1个事件触发器(有多种情况导致这种情况不会发生的原因)。几乎可以说,这里的整个想法是获得我们所谓的最后一次触摸,这意味着在事件AAA由ID 123触发的5天(每天)中,已确认的触发应该仅在当天发生5,我想消除第1,2,3&4天的ID 123的计数。

使事情更清晰;

示例数据

Date        ID      Event
=========================
01-09-2018  123     AAA
01-09-2018  456     AAA
02-09-2018  123     AAA
03-09-2018  123     AAA
04-09-2018  123     AAA
05-09-2018  123     AAA

当前输出

Date        Count
=================
01-09-2018   2
02-09-2018   1
03-09-2018   1
04-09-2018   1
05-09-2018   1

所需的输出

Date         Count
==================
01-09-2018   1
02-09-2018   0
03-09-2018   0
04-09-2018   0
05-09-2018   1

我的查询:

SELECT
  date,
  COUNT(DISTINCT id)
FROM
  [data]
WHERE
  event = 'AAA'
  AND date >= DATE_SUB(NOW(),INTERVAL 5 DAY)
GROUP BY
  date

非常基本的查询,就像目前一样,我正在使用上述查询来提取数据,并且我还将提取整个数据库并使用excel中的lil弯头润滑脂进行手动处理。如果我可以构建一个查询来实现高于期望的输出,将不胜感激。 (减轻了我每天使用Supemetrics使它们自动化的痛苦)。将不胜感激关于如何实现这一点的想法(链接到教程/方法,指针,任何东西)。非常感谢!

1 个答案:

答案 0 :(得分:0)

请运行此查询。要进行更多测试,我们需要更多的架构定义和数据。

SELECT
  date,
  COUNT(DISTINCT id)
FROM
  [data]
INNER JOIN 
(
SELECT
  event AS event1,
  MAX(date) date1,
FROM [data]
WHERE date >= DATE_SUB(NOW(),INTERVAL 5 DAY)
GROUP BY event  
)T
    ON [data].event= T.event1   
    AND [data].date= T.date1
WHERE
  event = 'AAA'
  AND date >= DATE_SUB(NOW(),INTERVAL 5 DAY)
GROUP BY
  date