从2个表格中创建字段值的总和,但从两个表格中选择最新日期

时间:2019-10-25 15:53:02

标签: sql sqlite

我有两个具有相同列类型的表:hostfrequencydate

host是主键。

我想要这样,以便我可以将3月和4月的表格合并起来并汇总其频率。

这是我在最终输出中所期望的。

  • 让X为某个主键值host
  • 如果X仅存在于一个表中,请在最终结果中使用该行。
  • 如果两个表中都存在X。总结两行的freq,然后选择最近的date。因此,如果我们必须在4/20/19与4/2/19之间进行比较,那么应该选择4/20/19。

假设我有以下表格:

  • 表:Report_4.1.19

host    freq    date
A       15      4/1/2019
C       30      4/1/2019
  • 表:Report_3.1.19

host    freq    date
A       10      3/1/2019
B       20      3/1/2019

我的理想输出应为:

  • 表:结果

host    sum(freq)   date
A       25          4/1/2019
B       20          3/1/2019
C       30          4/1/2019

这是我到目前为止所尝试的:

SELECT host,sum(freq),date
from
(
   select
        host,
        freq,
        date
    from Report_4.1.19
    union 
    select
        host,
        freq,
        date
    from Report_3.1.19

)
group by host

虽然我的代码似乎确实达到了预期的结果,但是我不确定我是否正确考虑了日期选择。我该怎么做才能修改我的代码(如果需要)?

2 个答案:

答案 0 :(得分:0)

第一步:使用sqlite date and time functions支持的日期格式,因为与您所拥有的日期格式相比,可以对日期格式进行有意义的排序和比较。 YYYY-MM-DD有效。

第二步:对所有报告使用一个表(您已经将日期作为一列来跟踪,以区分它们!)使事情变得简单,并发挥了关系数据库的优势。使PK host, date而不只是host

第三步:然后变成一个简单的查询:

SELECT host, sum(freq), max(date) AS date
FROM reports
GROUP BY host
ORDER BY host;

答案 1 :(得分:0)

您的查询几乎是正确的。只需使用工会中日期列的最大值即可。

SELECT host,sum(freq),max(date)
from
(
   select
        host,
        freq,
        date
    from Report_4.1.19
    union 
    select
        host,
        freq,
        date
    from Report_3.1.19

)
group by host

注意:如果您希望获得每日总和,则可以直接使用日期,然后将日期添加到group by子句中。