MySQL-如何自动执行从最近日期到前一天减去指标的视图查询&;最新数据的日期戳

MySQL-如何自动执行从最近日期到前一天减去指标的视图查询&;最新数据的日期戳,mysql,mysql-workbench,Mysql,Mysql Workbench,我有一个每日API调用,它为我提供一个唯一ID的生命周期数据,并在每天午夜为数据批打上日期戳。这些数据被附加到MySQL中的数据库中,但我需要以某种方式对其进行转换,这样我就可以获得每个度量的唯一id的每日数据 MySQL中的我的表: 所需输出: CREATE VIEW `facebook_insights` AS SELECT t1.id , t1.timestamp , t1.message , t1.posted , t1.permalink_url ,

我有一个每日API调用,它为我提供一个唯一ID的生命周期数据,并在每天午夜为数据批打上日期戳。这些数据被附加到MySQL中的数据库中,但我需要以某种方式对其进行转换,这样我就可以获得每个度量的唯一id的每日数据

MySQL中的我的表:

所需输出:

CREATE VIEW `facebook_insights` AS  
SELECT  
  t1.id  
, t1.timestamp  
, t1.message  
, t1.posted  
, t1.permalink_url  
, t1.caption  
, t1.link  
, t1.type  
, t1.post_impressions - t2.post_impressions as Impressions  
, t1.post_impressions_organic - t2.post_impressions_organic as Post_Impressions_Organic  
, t1.post_impressions_paid - t2.post_impressions_paid as Post_Impressions_Paid  
, t1.post_engaged_users - t2.post_engaged_users as Post_Engaged_Users  
, t1.post_consumptions - t2.post_consumptions as Post_Consumptions  
, t1.post_negative_feedback - t2.post_negative_feedback as 
Post_Negative_Feedback  
, t1.post_negative_feedback_unique - t2.Post_Negative_Feedback_Unique as 
Post_Negative_Feedback_Unique  
, t1.post_impressions_fan - t2.post_impressions_fan as Post_Impressions_Fan  
, t1.post_impressions_fan_paid - t2.post_impressions_fan_paid as 
Post_Impressions_Fan_Paid  
, t1.post_engaged_fan - t2.Post_Engaged_Fan as Post_Engaged_Fan  
, t1.post_video_complete_views_organic - 
t2.post_video_complete_views_organic as Post_Video_Complete_Views_Organic  
, t1.post_video_complete_views_paid - t2.post_video_complete_views_paid as 
Post_Video_Complete_Views_Paid  
, t1.post_video_views_10s - t2.post_video_views_10s as Post_Video_Views_10s  
, t1.post_video_views_10s_unique - t2.post_video_views_10s_unique as 
Post_Video_Views_10s_Unique  
, t1.post_video_views_organic - t2.post_video_views_organic as 
Post_Video_Views_Organic  
, t1.post_video_views_paid - t2.post_video_views_paid as 
Post_Video_Views_Paid  
, t1.post_video_views_clicked_to_play - t2.post_video_views_clicked_to_play 
as Post_Video_Views_Clicked_to_Play  

FROM  
unpaid_media.facebook_insight t1  
JOIN unpaid_media.facebook_insight t2  
ON t1.id = t2.id   
and t1.timestamp  = t2.timestamp + INTERVAL 1 DAY  

对于id 3,我将前一天(2017年7月3日)和最近日期(2017年7月4日)的差异作为其各自的指标(印象、点击次数),并将该行项目的时间戳为2017年7月4日。我需要按id处理这种类型的转换,以获得多个id和指标。谢谢大家!

根据Jacob的反馈更新我的查询:

CREATE VIEW `facebook_insights` AS  
SELECT  
  t1.id  
, t1.timestamp  
, t1.message  
, t1.posted  
, t1.permalink_url  
, t1.caption  
, t1.link  
, t1.type  
, t1.post_impressions - t2.post_impressions as Impressions  
, t1.post_impressions_organic - t2.post_impressions_organic as Post_Impressions_Organic  
, t1.post_impressions_paid - t2.post_impressions_paid as Post_Impressions_Paid  
, t1.post_engaged_users - t2.post_engaged_users as Post_Engaged_Users  
, t1.post_consumptions - t2.post_consumptions as Post_Consumptions  
, t1.post_negative_feedback - t2.post_negative_feedback as 
Post_Negative_Feedback  
, t1.post_negative_feedback_unique - t2.Post_Negative_Feedback_Unique as 
Post_Negative_Feedback_Unique  
, t1.post_impressions_fan - t2.post_impressions_fan as Post_Impressions_Fan  
, t1.post_impressions_fan_paid - t2.post_impressions_fan_paid as 
Post_Impressions_Fan_Paid  
, t1.post_engaged_fan - t2.Post_Engaged_Fan as Post_Engaged_Fan  
, t1.post_video_complete_views_organic - 
t2.post_video_complete_views_organic as Post_Video_Complete_Views_Organic  
, t1.post_video_complete_views_paid - t2.post_video_complete_views_paid as 
Post_Video_Complete_Views_Paid  
, t1.post_video_views_10s - t2.post_video_views_10s as Post_Video_Views_10s  
, t1.post_video_views_10s_unique - t2.post_video_views_10s_unique as 
Post_Video_Views_10s_Unique  
, t1.post_video_views_organic - t2.post_video_views_organic as 
Post_Video_Views_Organic  
, t1.post_video_views_paid - t2.post_video_views_paid as 
Post_Video_Views_Paid  
, t1.post_video_views_clicked_to_play - t2.post_video_views_clicked_to_play 
as Post_Video_Views_Clicked_to_Play  

FROM  
unpaid_media.facebook_insight t1  
JOIN unpaid_media.facebook_insight t2  
ON t1.id = t2.id   
and t1.timestamp  = t2.timestamp + INTERVAL 1 DAY  

这里的关键是将表重新连接到自身。在下面的查询中,我将重新加入您的表,但将其设置为使时间戳成为连接上的限定符。这将加入前一天的记录,并允许您简单地减去它们

选择
t1.id
,t1.时间戳
,t1.印象-t2.印象作为印象
,t1.点击-t2.点击作为点击
从…起
表t1
联接表t2
在t1.id=t2.id上
t1.timestamp=t2.timestamp+间隔1天

看起来分组函数很有用,因为它看起来像是要按日期和ID聚合印象和点击。此外,您没有提到此数据需要任何联接(尚未),因此这是假设它位于单个表中。T-SQL中的以下内容:

USE DatabaseName
GO

SELECT T.ID, 
       (CAST(T.TimeStamp) as Date) as Date, 
       SUM(T.Impressions) as TotalImpressionsPerDay, 
       SUM(T.Clicks) as TotalClicksPerDay
FROM TableName as T
GROUP BY ID, (CAST(T.TimeStamp) as Date)
ORDER BY ID ASC

那看起来不太好difficult@Strawberry:这并不是很难,但不如简单地使用解析函数方便。。。很多人都很难将自己的脑袋绕在一个self-joinThank@Jacobm001上,但现在我遇到了这个错误:非法混合排序规则(拉丁语-瑞典语-ci隐式)和(utf8_general_ci可强制用于操作“=”我从中调用的表的排序规则设置为latin1-默认值collation@UlisesSotomayor:这应该可以解决stackoverflow.com/a/1008336/1142368 OP有一个按日计算的总数。他想用它来生成显示每日值的输出。@Jacobm001我明白了,区别是每天增长。奇怪的是,API会以这种方式吐出生命周期数据,而不是附加新数据。