प्रौद्योगिकी साझेदारी

[Hive SQL Daily Question] जनानां शिखरस्य ऑनलाइन संख्यायाः गणना

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Test Data

-- 创建 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');
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

आवश्यकतानां कथनम्

कस्यचित् प्रणाल्याः कृते प्रत्येकं समये ऑनलाइन जनानां शिखरसङ्ख्यां गणयन्तु ।

परिणामानां उदाहरणम् : १.

क्रिया_समयअधिकतम_उपयोक्तारः
2024-07-11 088
2024-07-11 099

परिणाम प्रेस 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');
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

उत्पादनं यथा भवति ।

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

अस्य प्रश्नस्य मूलं उपप्रश्नः अस्ति 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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

प्रथमं वयं उपप्रश्नं कुर्मः 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

अन्ते कालबिन्दुभिः समूहीकृत्य समुच्चयतु, माध्यमेन max फंक्शन् प्रत्येकं समयबिन्दौ जनानां अधिकतमं शिखरसङ्ख्यां अन्विष्य~ पूर्णं करोति