我有两个具有相同列类型的表:host
,frequency
和date
。
host
是主键。
我想要这样,以便我可以将3月和4月的表格合并起来并汇总其频率。
这是我在最终输出中所期望的。
host
。freq
,然后选择最近的date
。因此,如果我们必须在4/20/19与4/2/19之间进行比较,那么应该选择4/20/19。 host freq date
A 15 4/1/2019
C 30 4/1/2019
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
虽然我的代码似乎确实达到了预期的结果,但是我不确定我是否正确考虑了日期选择。我该怎么做才能修改我的代码(如果需要)?
答案 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子句中。