帶有區號和收集的人口數的國家表。
我想回傳當月最后一天登記的人口。有的地區有記錄到月末,有的地區全天都沒有記錄,這樣的話,我就得把最后記錄的日期當作月末的例子,16-09 -2022。我不知道如何撰寫案例陳述以選擇具有月底的區域和具有當月最后注冊日期的區域的日期。如果區域 06 的人口 120 于 2022 年 9 月 30 日注冊,則區域 06 的日期將為 30-09-2022,如果區域 05 的人口 30 于 2022 年 9 月 18 日注冊,則區域的日期將為 2022 年 9 月 18 日05
SELECT
[Date]
,Country
,[Area Code]
,[From date]
,CASE WHEN [End date] = '1900-01-01' THEN Null ELSE [End date] END AS [End date]
,[Population]
,[Water Temperature (°C)]
FROM [dbo].[Population]
WHERE [Date] IN (
SELECT
CASE WHEN [Date]= EOMONTH([Date]) THEN EOMONTH([Date]) ELSE MAX([Date]) END AS [DATE]
FROM [dbo].[Population])
GROUP BY [Date]
Order BY [Date]
人口表中的資料
INSERT INTO #Population (Date, Country, AreaCode, PopulationNo,[Temperature]) VALUES ('2022-06-08','B',6,118102,8.7), ('2022-06-09','B',6,118067,8.7), ('2022-06-10','B',6,118027,8.3), ('2022-06-11','B',6,117992,9.1), ('2022-06-12','B',6,117940,8.9), ('2022-06-13','B',6,117924,9.1), ('2022-06-14','B',6,117849,9.9), ('2022-06-15','B',6,117799,9.5), ('2022-06-16','B',6,117780,9.5), ('2022-06-17','B',6,117742,9.7), ('2022-06-18','B',6,117740,9.8), ('2022-06-19','B',6,117732,9.2), ('2022-06-20','B',6,117676,9.8), ('2022-06-21','B',6,117556,10.5), ('2022-06-22','B',6,117552,10.3), ('2022-06-23','B',6,117524,10.4), ('2022-06-24','B',6,117496,10.4), ('2022-06-25','B',6,117471,10.3), ('2022-06-26','B',6,117466,10.5), ('2022-06-27','B',6,117461,10.8), ('2022-06-28','B',6,117461,10.7), ('2022-06-29','B',6,117459,11), ('2022-06-30','B',6,117459,11), ('2022-07-01','B',6,117446,11.4), ('2022-07-02','B',6,117445,11.1), ('2022-07-03','B',6,117442,10.9), ('2022-07-04','B',6,117438,12.4), ('2022-07-05','B',6,117438,12.1), ('2022-07-06','B',6,117426,12.4), ('2022-07-07','B',6,117414,12.9), ('2022-07-08','B',6,117407,12.8), ('2022-07-09','B',6,117404,12.6), ('2022-07-10','B',6,117403,12.2), ('2022-07-11','B',6,117402,12.4), ('2022-07-12','B',6,117401,12.3), ('2022-07-13','B',6,117389,13.5), ('2022-07-14','B',6,117377,12.7), ('2022-07-15','B',6,117366,12.9), ('2022-07-16','B',6,117351,13), ('2022-07-17','B',6,117331,13), ('2022-07-18','B',6,117309,13.2), ('2022-07-19','B',6,117279,13), ('2022-07-20','B',6,117259,12.9), ('2022-07-21','B',6,117243,13), ('2022-07-22','B',6,117192,13), ('2022-07-23','B',6,117129,12.8), ('2022-07-24','B',6,117093,12.8), ('2022-07-25','B',6,117078,12.8), ('2022-07-26','B',6,117065,12.9), ('2022-07-27','B',6,116871,13), ('2022-07-28','B',6,116816,12.8), ('2022-07-29','B',6,116785,12.8), ('2022-07-30','B',6,116737,12.9), ('2022-07-31','B',6,116157,13.9), ('2022-08-01','B',6,116042,13.5), ('2022-08-02','B',6,115982,13.1), ('2022-08-03','B',6,115981,13.7), ('2022-08-04','B',6,115975,13.7), ('2022-08-05','B',6,115934,13.5), ('2022-08-06','B',6,115897,13.3), ('2022-08-07','B',6,115867,13.3), ('2022-08-08','B',6,115822,13.1), ('2022-08-09','B',6,115748,13.4), ('2022-08-10','B',6,115685,13.3), ('2022-08-11','B',6,115611,13.1), ('2022-08-12','B',6,115540,12.9), ('2022-08-13','B',6,115456,12.9), ('2022-08-14','B',6,115403,12.9), ('2022-08-15','B',6,115335,13), ('2022-08-16','B',6,115265,13.1), ('2022-08-17','B',6,115120,12.9), ('2022-08-18','B',6,114997,12.9), ('2022-08-19','B',6,114939,12.8), ('2022-08-20','B',6,114830,12.8), ('2022-08-21','B',6,114752,12.9), ('2022-08-22','B',6,114637,14), ('2022-08-23','B',6,114307,13.4), ('2022-08-24','B',6,114227,13.2), ('2022-08-25','B',6,114109,13.2), ('2022-08-26','B',6,114043,13.3), ('2022-08-27','B',6,113953,13.6), ('2022-08-28','B',6,113886,13.4), ('2022-08-29','B',6,113841,13.3), ('2022-08-30','B',6,113820,13.3), ('2022-08-31','B',6,113745,13.3), ('2022-09-01','B',6,113725,13.3), ('2022-09-02','B',6,113665,13), ('2022-09-03','B',6,113613,13.3), ('2022-09-04','B',6,113536,13.3), ('2022-09-05','B',6,113518,13.3), ('2022-09-06','B',6,113518,13.2), ('2022-09-07','B',6,113475,13.2), ('2022-09-08','B',6,113435,13.1), ('2022-09-09','B',6,113378,13.1), ('2022-09-10','B',6,113340,13.1), ('2022-09-11','B',6,113289,13), ('2022-09-12','B',6,113204,12.8), ('2022-09-13','B',6,113144,12.7), ('2022-09-14','B',6,113097,12.8), ('2022-09-15','B',6,113097,12.7), ('2022-09-16','B',5,112970,12.7), ('2022-09-16','B',6,0,0), ('2022-09-17','B',5,112353,12.6), ('2022-09-18','B',5,112034,12.7), ('2022-09-19','B',5,112024,12.4), ('2022-09-20','B',5,112007,12), ('2022-09-21','B',5,111988,12), ('2022-09-22','B',5,111980,11.9), ('2022-09-23','B',1,49950,11.9), ('2022-09-23','B',5,111970,11.9), ('2022-09-24','B',1,49936,11.9), ('2022-09-24','B',5,111963,11.9), ('2022-09-25','B',1,49930,11.9), ('2022-09-25','B',5,111938,11.9), ('2022-09-26','B',1,49924,11.8), ('2022-09-26','B',5,111901,11.8), ('2022-09-27','B',1,49919,11.6), ('2022-09-27','B',5,111897,11.6), ('2022-09-28','B',1,49918,11.4), ('2022-09-28','B',5,111882,11.4), ('2022-09-29','B',1,49918,11.4), ('2022-09-29','B',5,111878,11.4), ('2022-09-30','B',1,49916,11.3), ('2022-09-30','B',5,111858,11.3);
uj5u.com熱心網友回復:
如果我正確理解您,那么您真正想要的關鍵是任何給定國家、月份和年份的 MAX(Date) 上的人口。
通過您撰寫的查詢,可能發生的情況是每個國家/地區您將獲得超過 1 天的時間。
想象一下,A 國擁有 2022 年 9 月 30 日和 2022 年 9 月 29 日的資料,而 B 國只有 2022 年 9 月 29 日的資料。現在,您的子查詢提供的串列將包含 30-09-2022 和 29-09-2022,這不會幫助您減少國家 A 的資料集。
我已經建立了一個簡化的表格并像這樣填充它:
CREATE TABLE #Population ([Date] DATE, Country VARCHAR(1), [Population] INT);
INSERT INTO #Population (Date, Country, Population)
VALUES ('2022-09-30', 'A', 200),
('2022-09-29', 'A', 201),
('2022-08-31', 'A', 100),
('2022-08-30', 'A', 101),
('2022-09-29', 'B', 300),
('2022-09-28', 'B', 299),
('2022-08-30', 'B', 200),
('2022-08-29', 'B', 199);
這現在給了我兩個國家的原始資料,兩個不同的月份,日期不一定是 EOMONTH。
然后我可以撰寫一個 CTE 或臨時表,以使用以下方式獲取每個國家、月份和年份的適當日期:
;WITH CTEDates
AS (
SELECT MAX(P.Date) AS Date,
YEAR(P.Date) AS DateYear,
MONTH(P.Date) AS DateMonth,
P.Country
FROM #Population AS P
GROUP BY YEAR(P.Date),
MONTH(P.Date),
P.Country
)
從中選擇所有給我們的資料集是這樣的:
Date DateYear DateMonth Country
2022-08-31 2022 8 A
2022-08-30 2022 8 B
2022-09-30 2022 9 A
2022-09-29 2022 9 B
然后可以將其連接回您的人口表以添加到人口列中,如下所示:
SELECT CTEDates.Date, CTEDates.Country, P.Population
FROM CTEDates
INNER JOIN #Population AS P ON P.Country = CTEDates.Country AND P.Date = CTEDates.Date;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/512094.html
