我有一张表,记录了不同地点的自来水公司在分发中的氯气样品。首先,我有以下子查询:
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 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组中,无论日期如何,都将抽取所有氯样品,并取其最小值和最大值。我希望它可以区分收集日期和地区。
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 |
+-----------------------+-------------+---------------------+-------------------------+--------------+--------------+
我不确定您如何区分“最新最小”和“最新最大”值。例如,考虑两个条目:
新的1.5值取代了以前的最大值1.6,还是新的'最小值'?