选择按日期分组的数字范围?

问题描述 投票:0回答:1

我有一张表,记录了不同地点的自来水公司在分发中的氯气样品。首先,我有以下子查询:

SELECT CONCAT(MIN(in_dist.chlorine_mgl), ' - ', MAX(in_dist.chlorine_mgl))
FROM gis_user.BACTISURVEY AS in_dist
    INNER JOIN (SELECT MAX(last_edited_date ) AS max_date, collection_location, sample_type, date_sample_collected
    FROM gis_user.BACTISURVEY 
    GROUP BY date_sample_collected, collection_location, sample_type ) AS tbl ON tbl.collection_location = in_dist.collection_location 
    AND tbl.date_sample_collected = in_dist.date_sample_collected
WHERE samples.district_distribution = in_dist.district_distribution

此子查询具有一些条件:

  • 因此,对于我的应用程序中的这些网站,您可以选择编辑条目,但是数据库将这些编辑的存档保存在同一表格中,并以“编辑日期”来区分,因此自然地,我需要根据日期时间(由于程序的性质,我希望进行大量编辑)
  • 我想获取一组的最小氯气样品值和最大氯气值(该组为district_distribution AND ALSO date_sample_collected)

所以基本上我想要以下内容:

DISTRICT        CHLORINE        DATE COLLECTED
district1       1.2 - 2.6       March 30th 2020
district1       1.4 - 3.2       April 1st 2020
district2       1.6 - 2.4       March 30th 2020

但是我得到类似以下内容的东西:

DISTRICT        CHLORINE        DATE COLLECTED
district1       1.2 - 3.2       March 30th 2020
district1       1.2 - 3.2       April 1st 2020
district2       1.6 - 2.4       March 30th 2020

因此,向我显示的是,无论在district_distribution组中,无论日期如何,都将抽取所有氯样品,并取其最小值和最大值。我希望它可以区分收集日期和地区。

sql sql-server
1个回答
0
投票

问题的解释

  • 具有一个带有重复标签的数据的表,这些数据由档案条目来区分
  • 想要为每个最独特的标签(区域,收集的日期,类型等)找到最大/最小范围,这些标签是由last_edit_date列标识的最新数据

使用的表

declare @bactisurvey table (
    district_distribution varchar(200)
    ,sample_type varchar(100)
    ,collection_location varchar(100)
    ,date_sample_collected datetime
    ,last_edited_date datetime
    ,chlorine_mgl float
);

insert into @bactisurvey 
values
    ('district 1', 'type A', 'AUS', '2020-03-30', '2020-04-01', 1.2)
    ,('district 1', 'type A', 'AUS', '2020-03-30', '2020-04-02', 1.3)
    ,('district 1', 'type A', 'AUS', '2020-03-30', '2020-04-03', 1.4)
    ,('district 2', 'type A', 'AUS', '2020-03-29', '2020-04-01', 2.6)
    ,('district 2', 'type A', 'AUS', '2020-03-29', '2020-04-02', 2.5)
    ,('district 2', 'type B', 'AUS', '2020-03-29', '2020-04-03', 1.4)

查询

with TopEdits as (
    select 
        edit_num =(
            row_number() over (partition by 
                district_distribution
                ,sample_type
                ,collection_location
                ,date_sample_collected 
                order by last_edited_date desc
            ))
        ,district_distribution
        ,sample_type
        ,collection_location
        ,date_sample_collected
        ,last_edited_date
        ,chlorine_mgl
    from @bactisurvey
)
select
    district_distribution
    ,sample_type
    ,collection_location
    ,date_sample_collected
    ,min_chlorine = min(chlorine_mgl)
    ,max_chrloine = max(chlorine_mgl)
from TopEdits
where
    edit_num in (1, 2)
group by
    district_distribution
    ,sample_type
    ,collection_location
    ,date_sample_collected

结果

+-----------------------+-------------+---------------------+-------------------------+--------------+--------------+
| district_distribution | sample_type | collection_location | date_sample_collected   | min_chlorine | max_chlorine |
+-----------------------+-------------+---------------------+-------------------------+--------------+--------------+
| district 1            | type A      | AUS                 | 2020-03-30 00:00:00.000 | 1.3          | 1.4          |
+-----------------------+-------------+---------------------+-------------------------+--------------+--------------+
| district 1            | type A      | AUS                 | 2020-03-29 00:00:00.000 | 2.5          | 2.6          |
+-----------------------+-------------+---------------------+-------------------------+--------------+--------------+
| district 2            | type B      | AUS                 | 2020-03-29 00:00:00.000 | 1.4          | 1.4          |
+-----------------------+-------------+---------------------+-------------------------+--------------+--------------+

注意事项

我不确定您如何区分“最新最小”和“最新最大”值。例如,考虑两个条目:

  • 今天编辑的2020-03值1.5条目
  • 昨天编辑的2020-03值1.6条目

新的1.5值取代了以前的最大值1.6,还是新的'最小值'?

© www.soinside.com 2019 - 2024. All rights reserved.