sql server - SQL to determine minimum sequential days of access? -


निम्न उपयोगकर्ता इतिहास तालिका में प्रत्येक दिन के लिए एक रिकॉर्ड एक उपयोगकर्ता को एक वेबसाइट तक पहुंचा है ( 24 घंटे की यूटीसी अवधि में) इसमें कई हजारों अभिलेख हैं, लेकिन प्रति उपयोगकर्ता प्रतिदिन केवल एक रिकॉर्ड है। अगर उपयोगकर्ता ने उस दिन के लिए वेबसाइट तक नहीं पहुंचाया है, तो कोई रिकॉर्ड नहीं होगा।

 आईडी प्रयोक्ता आयडी निर्माण डेट ------ ------ ---------- - 750997 12 2009-07-07 18: 42: 20.723 750 998 15 2009-07-07 18: 42: 20.927 751000 19 2009-07-07 18: 42: 22.283  

मैं क्या देख रहा हूं

अनुक्रमिक (दिन-पहले या दिन-बाद) तिथियों के साथ इस तालिका में कितने उपयोगकर्ताओं (n) रिकॉर्ड हैं ? अगर अनुक्रम से कोई दिन गायब हो रहा है, तो क्रम टूट गया है और इसे 1 पर पुनः आरंभ करना चाहिए; हम उन प्रयोक्ताओं की तलाश कर रहे हैं जिन्होंने लगातार अंतराल हासिल कर ली है।

इस प्रश्न के बीच कोई समानता है और बिल्कुल संयोग है ..:)

इस सवाल का जवाब स्पष्ट रूप से है:

  का चयन करें DISTINCT UserId UserHistory uh1 से जहां (COUNT (* का चयन करें) से UserHistory uh2 कहां uh1.CreationDate और DATEADD बीच uh2.CreationDate (घ, @days, uh1.CreationDate)) = @days या UserId = 52551  

संपादित करें:

ठीक है यहां मेरा गंभीर जवाब है:

  DECLARE @ डीईसीएलएआर @ सेकंड सेकेंड बिबिनेट एसईटी @ दिन = 30 एसईटी @ सेकेंड = (@ दिन * 24 * 60 * 60) - 1 से (चयन uh1.UserId DISTINCT प्रयोक्ता-आईडी का चयन करें, गणना (uh1.Id) Conseq रूप UserHistory uh1 भीतर से uh1.CreationDate और DATEADD बीच uh2.CreationDate पर UserHistory uh2 शामिल हों (रों, @seconds, DATEADD (दिन, DateDiff (dd , 0, उह 1। क्रीेशन डेट), 0)) और uh1.UserId = uh2.UserId ग्रुप द्वारा uh1.Id, uh1.UserId) tbl के रूप में जहां Conseq & gt; = @days  

संपादित करें:

[जेफ़ एटवुड] यह एक महान तेज समाधान है और स्वीकार किया जाना चाहिए, लेकिन और यकीनन भी तेजी से (!)। कृपया इसे भी जांचें!


Comments

Popular posts from this blog

c# - ListView onScroll event -

PHP - get image from byte array -

Linux Terminal Problem with Non-Canonical Terminal I/O app -