Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

तालिका में विशिष्ट रिकॉर्ड और संबंधित घटनाओं के बीच के अंतराल को निर्धारित करने के लिए इनर जॉइन का उपयोग करना

स्थानांतरण या छुट्टी मानना ​​एक अनूठी घटना है जिसे आप ऐसा लिख ​​सकते हैं

SELECT
   b.EventTime - a.EventTime        
FROM
   Histories a
   INNER JOIN Histories b
   ON a.VisitID = b.VisitID
WHERE
   a.event = 'Admission'
   and
   b.event in ('Transfer', 'Discharge')

यदि आप अंतिम स्थानांतरण या सेवामुक्ति में रुचि रखते हैं तो आप लिखेंगे

SELECT
   b.EventTime - a.EventTime        
FROM
   Histories a
   INNER JOIN  Histories b
    ON a.VisitID = b.VisitID

   INNER JOIN 
   (SELECT
         VisitId, 
         MAX(HistoryID) HistoryID
    FROM Histories 
    WHERE 
       b.event in ('Transfer', 'Discharge')
    GROUP BY 
       VisitId) maxHistory
   ON b.HistoryID = maxHistoryId.HistoryId

WHERE
   a.event = 'Admission'

हालाँकि, यदि किसी विज़िट के परिणामस्वरूप कई विज़िट हो सकती हैं, जैसा कि एंड्री एम ने उल्लेख किया है कि आपको अंतराल और द्वीपों की समस्या है (विशेष रूप से द्वीप)

उस स्थिति में आप निम्नलिखित चाहते हैं

SELECT  
       a.VisitId,
       a.Event a_Event, 
       a.Event b_Event, 
       a.EventTime a_EventTime,
       b.EventTime b_EventTime,
       b_EventTime - a_EventTime

FROM   histories a 
       INNER JOIN histories B 
         ON a.visitID = b.visitID 
            AND a.EventTime < b.eventTime 
       INNER JOIN (SELECT a.VisitId, 
                          a.EventTime      a_EventTime, 
                          Min(b.EventTime) b_EventTime 
                   FROM   histories a 
                          INNER JOIN histories B 
                            ON a.visitID = b.visitID 
                               AND a.EventTime < b.eventTime 
                   GROUP  BY a_EventTime, 
                             a.VisitId) MinTime 
         ON a.VisitID = MinTime.VisitID 
            AND a.EventTime = a_EventTime 
            AND b.EventTime = b_EventTime 

DEMO

निम्नलिखित नमूना डेटा का उपयोग करना

CREATE TABLE Histories 
    (
     HistoryId int auto_increment primary key, 
     VisitId int,
     Location varchar(20),
     Event varchar(20), 
     EventTime datetime
    );

INSERT INTO Histories
(VisitId, Location, Event, EventTime)
VALUES
(1, 'A', 'Admission', '2012-01-01'),
(1, 'A', 'Discharge', '2012-01-03'),
(2, 'B', 'Admission', '2012-01-02'),
(2, 'C', 'Transfer', '2012-01-05'),
(2, 'C', 'Discharge', '2012-01-06'),
(3, 'D', 'Admission', '2012-01-06'),
(3, 'E', 'Transfer', '2012-01-07'),
(3, 'F', 'Transfer', '2012-01-08'),
(3, 'F', 'Discharge', '2012-01-10');

आपको निम्न परिणाम मिलते हैं

VISITID    A_EVENT   B_EVENT    A_EVENTTIME                     B_EVENTTIME                     B_EVENTTIME - A_EVENTTIME
1          Admission Discharge  January, 01 2012 00:00:00-0800  January, 03 2012 00:00:00-0800  2000000
2          Admission Transfer   January, 02 2012 00:00:00-0800  January, 05 2012 00:00:00-0800  3000000
2          Transfer  Discharge  January, 05 2012 00:00:00-0800  January, 06 2012 00:00:00-0800  1000000
3          Admission Transfer   January, 06 2012 00:00:00-0800  January, 07 2012 00:00:00-0800  1000000
3          Transfer  Transfer   January, 07 2012 00:00:00-0800  January, 08 2012 00:00:00-0800  1000000
3          Transfer  Discharge  January, 08 2012 00:00:00-0800  January, 10 2012 00:00:00-0800  2000000

नोट:

  • यह माना जाता है कि आपको ऐसे प्रवेश/स्थानांतरण की परवाह नहीं है जिनके पास अभी तक संबंधित निर्वहन/स्थानांतरण नहीं है।
  • यदि आप जानते हैं कि रिकॉर्ड दर्ज करने के बाद ईवेंट का समय नहीं बदलता है, तो आप ईवेंट के क्रम को निर्धारित करने के लिए ईवेंट समय के बजाय historyID का उपयोग कर सकते हैं।
  • आप जानते हैं कि अपने पसंद के प्रारूप में ईवेंट समय अंतर कैसे प्राप्त करें


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक MySQL दृश्य में LONGTEXT फ़ील्ड के लिए JPA मूल क्वेरी में त्रुटि होती है

  2. MySQL कुछ विदेशी कुंजियों को हटा रहा है

  3. तालिका में स्तंभों की संख्या ज्ञात कीजिए

  4. मोंगोडब में थ्रेडेड टिप्पणियों (टिप्पणी मतदान के साथ) के लिए डेटा का प्रतिनिधित्व कैसे करें?

  5. VB.NET mySQL इंसर्ट कमांड