Mysql SQL查询以创建具有不同时间戳和不同列映射的合并表

Mysql SQL查询以创建具有不同时间戳和不同列映射的合并表,mysql,sql,relational-database,Mysql,Sql,Relational Database,我正在尝试编写一个复杂的mySQL查询,其中有两个表action和revenue,我需要的是: 从拍卖表中取出位置、基于用户的邮政编码、cat_id、cat和支出,并与具有收入列的收入表连接,以便给定cat_id、cat和日期,我可以计算出每个“邮政”产生的回报。 复杂性: Select s.location, s.postal, s.spend, e.revenue From revenue e JOIN auction s on e.user = s.user where

我正在尝试编写一个复杂的mySQL查询,其中有两个表action和revenue,我需要的是:

从拍卖表中取出位置、基于用户的邮政编码、cat_id、cat和支出,并与具有收入列的收入表连接,以便给定cat_id、cat和日期,我可以计算出每个“邮政”产生的回报。 复杂性:

Select s.location, s.postal, s.spend, e.revenue
From revenue e JOIN
     auction s
     on e.user = s.user
where  s.event in ('Mid','End','Show') and 
       TO_DATE(CAST(UNIX_TIMESTAMP(e.dt, 'y-M-d') AS TIMESTAMP)) = TO_DATE(CAST(UNIX_TIMESTAMP(s.dt, 'y-M-d') AS TIMESTAMP)) and
       s.cat_id in ('3') and
       s.cat = 'B'
这里的用户是唯一的密钥

在拍卖中,表中有“已用”列,但只有当“事件”列有“显示”但有“cat”条目时,才会填充该列。“cat_id”开始在除展会之外的任何活动中出现。因此,需要从“cat”映射活动“show”的cat_id,以获得该cat_id的花费

必须设置日期,以便在加入表格时,时间戳应进行正负10分钟的比较。现在在我的查询中,我有24小时的持续时间

在邮政上按desc顺序聚合到回报最高的邮政

要通过汇总每个“邮政”区域的收入来创建最终表格:

location   postal   spend  revenue returns
UK          X12      2       0        0
US          L23      2       3        3/2=1.5  
我写了一个查询,但无法解决上述3个复杂问题:

Select s.location, s.postal, s.spend, e.revenue
From revenue e JOIN
     auction s
     on e.user = s.user
where  s.event in ('Mid','End','Show') and 
       TO_DATE(CAST(UNIX_TIMESTAMP(e.dt, 'y-M-d') AS TIMESTAMP)) = TO_DATE(CAST(UNIX_TIMESTAMP(s.dt, 'y-M-d') AS TIMESTAMP)) and
       s.cat_id in ('3') and
       s.cat = 'B'

任何建议都会很有帮助

这回答了MySQL的问题,这是问题的原始标签,也是问题中提到的标签

如果我理解正确,您的问题将在一个时间范围内加入。您可以使用相关子查询执行您想要的操作。剩下的是聚合,我认为是:

select location, postal, max(spend), max(revenue)
from (select a.*,
             (select sum(r.revenue)
              from revenue r
              where r.user = a.user and
                    r.dte >= s.dt - interval 10 minute and
                    r.dte <= s.dte + interval 10 minute
             ) as revenue
      from auction a
      where s.event in ('Mid', 'End', 'Show') and 
            s.cat_id in (3) and
            s.cat = 'B'
     ) a
group by location, postal;

根据您关于使用相关子查询的建议,我面临以下错误:AnalysisException:在非相等谓词中不允许使用uCorrelated列:\naggergate[sumcastrevenue17作为sumCASTrevenue作为DOUBLE498]\n+-Filter user2=outer85&&dt0>=castcastouterdt67-间隔10分钟作为时间戳作为字符串&&dt0我实现的查询:select location、postal、MAXPLOWEN、maxrevenue from select a.*,从revenue r中选择sumr.revenue,其中r.user=a.user,r.dt>=a.dt-间隔10分钟,r.dt@SachinKumar。这不是一个MySQL错误,这个问题是关于MySQL的,它在问题文本和唯一的数据库标记中都有。这个答案应该可以在MySQL中使用。是的,我尝试在Pyspark上实现,但是使用小树枝我能够得到最接近的结果。谢谢你。然而,您能否以最有效的方式提出关于实现“回报”列的见解?
select location, postal, max(spend), max(revenue)
from (select a.*,
             (select sum(r.revenue)
              from revenue r
              where r.user = a.user and
                    r.dte >= s.dt - interval 10 minute and
                    r.dte <= s.dte + interval 10 minute
             ) as revenue
      from auction a
      where s.event in ('Mid', 'End', 'Show') and 
            s.cat_id in (3) and
            s.cat = 'B'
     ) a
group by location, postal;