首页 > 解决方案 > 如何在 SQL 中从一张表编写双重查询

问题描述

假设我有两种设备可以每天处理点数。我想获得每天的当前点、平均点和最高点。

表结构类似于:

working_date           device    point_number
2020-03-12                A         1
2020-03-12                A         2 
2020-03-12                B         3 
2020-03-12                B         4
2020-03-14                A         5 
2020-03-14                A         6
2020-03-16                B         7
2020-03-17                A         8
2020-03-17                B         9

每行代表1分。首先,我创建了查询以显示每个日期的点数和设备数

select working_date, count(distinct device), count(point_number) from table1 group by working_date order by working_date 

结果是:

working_date    points_qty        device_qty       
2020-03-12         4                 2
2020-03-14         2                 1
2020-03-16         1                 1
2020-03-17         2                 2

选择 2020-03-18 作为报告日期,我想获取最后一个 working_date,即 2020-03-17,我想获取当天完成的当前点和设备/点完成的最大点/天。

当前 qty 是来自 points_qty / device_qty 的结果,而最大点数是来自所有 working_date 的最大点数 期望的结果:

report_date    last_working_date    current_point_qty      maximum_qty
2020-03-18      2020-03-17                  1                 4   

我在编写完整查询以获得所需结果时迷失了方向。我应该如何为此编写查询?

提前致谢

标签: sqlpostgresql

解决方案


     select (working_date::date + '1 day'::interval) report_date,working_date, 
   sum(countdevice)/sum(countnumber) current_point_qty,   max(countnumber) 
   maximum_qty from (
    select  working_date, count(distinct device)countdevice, 
    count(point_number)countnumber  from table1 group by working_date order by working_date )t
    group by (working_date::date + '1 day'::interval),working_date
    order by working_date desc limit 1

推荐阅读