2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
-- 创建 user_activity 表
DROP TABLE IF EXISTS user_activity ;
CREATE TABLE user_activity (
user_id STRING,
activity_start TIMESTAMP,
activity_end TIMESTAMP
);
-- 插入数据
INSERT INTO user_activity VALUES
('user1', '2024-07-11 08:00:00', '2024-07-11 09:00:00'),
('user2', '2024-07-11 08:30:00', '2024-07-11 09:30:00'),
('user3', '2024-07-11 09:00:00', '2024-07-11 10:00:00'),
('user4', '2024-07-11 09:15:00', '2024-07-11 09:45:00'),
('user5', '2024-07-11 09:30:00', '2024-07-11 10:30:00'),
('user6', '2024-07-11 10:00:00', '2024-07-11 11:00:00'),
('user7', '2024-07-11 08:05:00', '2024-07-11 08:55:00'),
('user8', '2024-07-11 08:45:00', '2024-07-11 09:15:00'),
('user9', '2024-07-11 09:05:00', '2024-07-11 10:05:00'),
('user10', '2024-07-11 09:25:00', '2024-07-11 10:25:00'),
('user11', '2024-07-11 08:10:00', '2024-07-11 09:10:00'),
('user12', '2024-07-11 08:20:00', '2024-07-11 09:20:00'),
('user13', '2024-07-11 08:35:00', '2024-07-11 09:35:00'),
('user14', '2024-07-11 08:50:00', '2024-07-11 09:50:00'),
('user15', '2024-07-11 09:10:00', '2024-07-11 10:10:00'),
('user16', '2024-07-11 09:20:00', '2024-07-11 10:20:00'),
('user17', '2024-07-11 09:40:00', '2024-07-11 10:40:00'),
('user18', '2024-07-11 10:05:00', '2024-07-11 11:05:00'),
('user19', '2024-07-11 10:15:00', '2024-07-11 11:15:00'),
('user20', '2024-07-11 10:25:00', '2024-07-11 11:25:00');
कस्यचित् प्रणाल्याः कृते प्रत्येकं समये ऑनलाइन जनानां शिखरसङ्ख्यां गणयन्तु ।
परिणामानां उदाहरणम् : १.
क्रिया_समय | अधिकतम_उपयोक्तारः |
---|---|
2024-07-11 08 | 8 |
2024-07-11 09 | 9 |
… | … |
परिणाम प्रेस activity_time
आरोहणम् ।
इत्यस्मिन्:
activity_time
सांख्यिकीयसमयबिन्दुं सूचयति;max_users
तस्मिन् समये जनानां सर्वाधिकं शिखरसङ्ख्यां सूचयति ।select
date_format(activity_time,'yyyy-MM-dd HH') activity_time,
max(total_users) max_users
from
(select
activity_time,
sum(flag) over(order by activity_time) total_users
from
(select
activity_start activity_time,
1 flag
from
user_activity
union all
select
activity_end activity_time,
-1 flag
from
user_activity)t1
)t2
group by
date_format(activity_time,'yyyy-MM-dd HH');
उत्पादनं यथा भवति ।
अस्य प्रश्नस्य मूलं उपप्रश्नः अस्ति t2
इत्यत्र तर्कः : १.
select
activity_time,
sum(flag) over(order by activity_time) total_users
from
(select
activity_start activity_time,
1 flag
from
user_activity
union all
select
activity_end activity_time,
-1 flag
from
user_activity)t1;
प्रथमं वयं उपप्रश्नं कुर्मः t1
स्तम्भान् पङ्क्तौ परिवर्तयन्तु, अतः भवद्भिः किमर्थम् एतत् कर्तव्यम् ? अवश्यं एतत् सांख्यिकीयसुविधायै अस्ति।
यदा कश्चन उपयोक्ता प्रवेशं कृत्वा प्रणाल्यां प्रविशति तदा प्रणाल्यां जनानां संख्या वर्धते वा ? +1
, प्रत्युत यदा उपयोक्ता निर्गच्छति तदा जनानां संख्या वर्धते वा? -1
。
यदा वयं प्रवेश-प्रवेश-समयान् एकस्मिन् स्तम्भे स्थापयामः, समयेन च क्रमेण स्थापयामः, तदा वयं प्रत्येकस्मिन् क्षणे जनानां संख्यां सम्यक् गणयितुं शक्नुमः वा? t2
वयं यत् कुर्मः तत् विण्डो फंक्शन्स् मार्गेण सञ्चितगणनां कुर्मः,t2
परिणामः एतादृशः दृश्यते यत् -
2024-07-11 08:00:00 1
2024-07-11 08:05:00 2
2024-07-11 08:10:00 3
2024-07-11 08:20:00 4
2024-07-11 08:30:00 5
2024-07-11 08:35:00 6
2024-07-11 08:45:00 7
2024-07-11 08:50:00 8
2024-07-11 08:55:00 7
2024-07-11 09:00:00 7
2024-07-11 09:00:00 7
2024-07-11 09:05:00 8
2024-07-11 09:10:00 8
2024-07-11 09:10:00 8
2024-07-11 09:15:00 8
2024-07-11 09:15:00 8
2024-07-11 09:20:00 8
2024-07-11 09:20:00 8
2024-07-11 09:25:00 9
2024-07-11 09:30:00 9
2024-07-11 09:30:00 9
2024-07-11 09:35:00 8
2024-07-11 09:40:00 9
2024-07-11 09:45:00 8
2024-07-11 09:50:00 7
2024-07-11 10:00:00 7
2024-07-11 10:00:00 7
2024-07-11 10:05:00 7
2024-07-11 10:05:00 7
2024-07-11 10:10:00 6
2024-07-11 10:15:00 7
2024-07-11 10:20:00 6
2024-07-11 10:25:00 6
2024-07-11 10:25:00 6
2024-07-11 10:30:00 5
2024-07-11 10:40:00 4
2024-07-11 11:00:00 3
2024-07-11 11:05:00 2
2024-07-11 11:15:00 1
2024-07-11 11:25:00 0
अन्ते कालबिन्दुभिः समूहीकृत्य समुच्चयतु, माध्यमेन max
फंक्शन् प्रत्येकं समयबिन्दौ जनानां अधिकतमं शिखरसङ्ख्यां अन्विष्य~ पूर्णं करोति