मान लें कि आपकी तालिका Event
है और कॉलम हैं EventID
और Name
. हम अनुक्रम (यानी, 1, 2, 3, आदि) निर्धारित कर सकते हैं जिसमें प्रत्येक व्यक्ति निम्नलिखित प्रश्न के द्वारा घटनाओं में भाग लेता है:
SELECT
e1.Name, e1.EventID, COUNT(*) AS PersonalEventSequence
FROM
Event e1
INNER JOIN
Event e2
ON e1.Name = e2.Name AND e1.EventID >= e2.EventID
GROUP BY
e1.Name, e1.EventID
हम PersonalEventSequence
. का लाभ उठा सकते हैं प्रत्येक व्यक्ति की घटनाओं को स्ट्रीक्स में समूहित करने के लिए:
SELECT
Name, EventID - PersonalEventSequence AS StreakGroup
FROM
(
SELECT
e1.Name, e1.EventID, COUNT(*) AS PersonalEventSequence
FROM
Event e1
INNER JOIN
Event e2
ON e1.Name = e2.Name AND e1.EventID >= e2.EventID
GROUP BY
e1.Name, e1.EventID
) AS SubQuery1
अब जबकि प्रत्येक व्यक्ति की घटनाओं को स्ट्रीक्स में समूहीकृत कर दिया गया है (जिसमें अजीब स्ट्रीकग्रुप नंबर हैं!), हम प्रत्येक व्यक्ति की स्ट्रीक्स की लंबाई निर्धारित कर सकते हैं:
SELECT
Name, StreakGroup, COUNT(*) AS StreakLength
FROM
(
SELECT
Name, EventID - PersonalEventSequence AS StreakGroup
FROM
(
SELECT
e1.Name, e1.EventID, COUNT(*) AS PersonalEventSequence
FROM
Event e1
INNER JOIN
Event e2
ON e1.Name = e2.Name AND e1.EventID >= e2.EventID
GROUP BY
e1.Name, e1.EventID
) AS SubQuery1
) SubQuery2
GROUP BY
Name, StreakGroup
अब जबकि हम प्रत्येक व्यक्ति की लकीरों की लंबाई जानते हैं, हम प्रत्येक व्यक्ति की सबसे लंबी लकीर की लंबाई निर्धारित कर सकते हैं:
SELECT
Name, MAX(StreakLength) AS PersonalRecordStreakLength
FROM
(
SELECT
Name, StreakGroup, COUNT(*) AS StreakLength
FROM
(
SELECT
Name, EventID - PersonalEventSequence AS StreakGroup
FROM
(
SELECT
e1.Name, e1.EventID, COUNT(*) AS PersonalEventSequence
FROM
Event e1
INNER JOIN
Event e2
ON e1.Name = e2.Name AND e1.EventID >= e2.EventID
GROUP BY
e1.Name, e1.EventID
) AS SubQuery1
) SubQuery2
GROUP BY
Name, StreakGroup
) SubQuery3
GROUP BY
Name
नोट:
- ओपी केवल वर्तमान स्ट्रीक्स चाहता था (यानी, स्ट्रीक्स जिसमें नवीनतम घटना शामिल है), लेकिन मैं उस विशिष्ट समाधान को ओपी पर छोड़ रहा हूं ताकि यह पता लगाया जा सके कि यहां दिखाया गया सामान्य समाधान अधिक प्रोग्रामर पर लागू होगा। ली>
- उपश्रेणियों के बजाय दृश्यों का उपयोग करके कोड को साफ किया जा सकता है।
- मैंने इस कोड को चलाने की कोशिश नहीं की है। त्रुटियां हो सकती हैं।