3 समूहों के लिए चैट में चर्चा के आधार पर, और इसने SQLFiddle प्रदान किया। परीक्षण डेटा के लिए (वहां अधिक डेटा नहीं है)।
जहां now()
. की स्लाइडिंग विंडो के साथ टेस्टिंग डेटा के कारण उस डेटा के संबंध में, निम्न चर का उपयोग "फ्रीज" करने के लिए किया गया था now()
. बस आउटपुट के परीक्षण और सत्यापन की सुविधा के लिए।
तो, अंत में इसे छोड़ दें और उस कोड में 4 संदर्भों को बदलें जो इसका उपयोग करते हैं (ध्यान दें कि समूह 3 इसका दो बार उपयोग करता है)।
now()
चर:
select @theNow:=now();
-- REM OUT the following line. It is used only for testing (as now will chg, your data won't)
select @theNow:='2016-06-23 14:00:00';
प्रश्न:
select id,sentNum,message,sentTime,startAtTime,sentByTime,msgType,theGrp from
( select id,sentNum,message,sentTime,startAtTime,sentByTime,msgType,theGrp,
if([email protected],greatest(@sentNumChg:=1,0),least(@sentNumChg:=0,1)) as dummy1,
if([email protected],greatest(@grpChg:=1,0),least(@grpChg:=0,1)) as dummy2,
if(@sentNumChg=1 or @grpChg=1,@seqNum:=1,@seqNum:[email protected]+1) as seqNum,
@lastSentNum:=sentNum as setLast01,
@lastGrp:=theGrp as setLast02
from
( -- GROUP 1: sentByTime<=now(), INVITE
select `id`, `sentNum`, `message`, `sentTime`, `startAtTime`, `sentByTime`, `msgType`, 1 as theGrp
from SmsQueue
where sentByTime<[email protected] and msgType='invite'
UNION ALL
-- GROUP 2 startAtTime<=now(), BROADCAST
select `id`, `sentNum`, `message`, `sentTime`, `startAtTime`, `sentByTime`, `msgType`, 2 as theGrp
from SmsQueue
where startAtTime<[email protected] and msgType='broadcast'
UNION ALL
-- GROUP 3: sentByTime>now() && startAtTime<=now(), INVITE
select `id`, `sentNum`, `message`, `sentTime`, `startAtTime`, `sentByTime`, `msgType`, 3 as theGrp
from SmsQueue
where sentByTime>@theNow and startAtTime<[email protected] and msgType='invite'
) d1
cross join (select @sentNumChg:=0,@grpChg:=0,@lastSentNum:='',@lastGrp:=0,@seqNum:=0) as xParams
order by sentNum,theGrp,sentByTime,id -- id is the tie-break
) d2
where (theGrp=1 and seqNum<3) or (theGrp=2 and seqNum=1) or (theGrp=3 and seqNum=1)
order by sentNum,theGrp;
आउटपुट (मेरा क्लाइंट टूल इस समय टेक्स्ट चैलेंज्ड है):
इस के शीर्ष पर मेरी सामान्य टिप्पणियां देखें उन्नत चर उपयोग के लिए मेरा उत्तर।