Bir MySQL sorgu sorum var.Saat başına aktif kullanıcı sayısını iki datetime girişine göre sayma
Web uygulamamda, "dinlenen" i içeren bir MySQL veritabanı tablosundaki "Shoutcast" sunucumdaki aktif dinleyicileri kaydediyorum ve ne zaman ayarlandıkları için bir datetime alanı ve "güncellenmiş" bir detetime alanı Sunucu, Shoutcast sunucusunu (her dakika) sorguladı. Ayrıca, aynı zamanda, dinleme oturumunun saniye cinsinden süresini ve her oturuma özgü olan kullanıcı kimliğini (kullanıcı oturumu kimliği) de alıyorum.
Ne yapmak isterim, saat başına dinleyici sayısını sayabiliriz, örneğin 13:00 = 20 dinleyici, ancak sadece ayarlanmış olanları değil, "oluşturulmuş" datetime alanını da dahil etmek istiyorum, ama Ayrıca, bir önceki saatten beri dinleyen tüm dinleyiciler, bu yüzden "update" datetime alanı.
Bunu başarmak için hangi sorguya ihtiyacım var? Bir seferde sadece 1 gün sonuç üretebilirim.
"COUNT (id) AS vuruşu" ve "GROUP BY" ile benzer bir şeyi nasıl kullanacağını anlıyorum, ancak "update" datetime alanı sürekli olduğundan, datetime alanlarını nasıl etkileyeceğimi bilmiyorum. Kullanıcı hala dinlediği sürece güncellendi. Ve bazı kullanıcılar 3 saat dinlemeye devam edebilirler +. Düzenleme
veritabanı şeması ana parçaları olan: id (int 20), oluşturulan (datetime), güncelleştirilmiş (datetime), uid (20 int), süre (int 10).
istenen sonucu benzer bir şey olacaktır:
(Süre/lan) 0900 => 10, 1000 => 15 => 5 1100 1200 => 8 1300 => 25
SEÇ ülke, COUNT (id) listeners_log NEREDEN vurur AS -: vesaire ...
Bu
tarafından grubunu kullanır ve) (sayım ı ülkeye göre sonuçları filtrelemek için kullandığınız bir sorgu olduğunu YIL (oluşturulmuş) = YIL (ŞİMDİ()) VE AY (oluşturulan) = AY (ŞİMDİ()) VE süresi> = 60Sorgunun sonunda, 60 saniyeden daha kısa olan oturumları filtrelemek için eklenmiş bir filtre de vardır.
Biraz daha fazla detay vermek için, oluşturulan alan bir kullanıcı bir dinleme oturumu bağladığında/başladığında yansır. Örneğin, oluşturulan alana yansıyan 2016-03-21 15:00:00 saatleri arasında ayarlanır. Ancak hala 1 saat içinde dinliyorlarsa, güncelleme alanı 2016-03-21 16:00:00 öğelerini okuyacaktır, ancak oluşturulan alan aynı kalacaktır.
Güncelleme:
aşağıdaki SQL ile geldim, ama bu sadece yaratılan alanıyla belirtilen açmasının bağlantı, sayar ve bir kullanımın sonraki bir saatten bağlı kalırsa yok sayar.
SEÇ SAAT (oluşturulan), COUNT (id)
Sorgunun üzerinde çalışmasını istediğiniz tablo için bir şema belirtebilir misiniz? Ayrıca, hata ayıklamaya yardımcı olmak için zaten denediğiniz sorgunuz var mı? – stratedge
db şema örnek verisine ve arzu çıkışına ihtiyacımız var. \t Lütfen [** Nasıl Yapılır **] 'ı okuyun (http://stackoverflow.com/help/how-to-ask) \t \t Burada [** START **] için harika bir yer var. http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/) Sorularınızın kalitenizi nasıl geliştirdiğini öğrenmek ve daha iyi cevaplar almak için. –
Dolayısıyla, yalnızca 'update' datetime alanında sorgulamanız gerekecek çünkü yeni bir kullanıcı bile 'create' datetime ve 'update' datetime altında bir sonraki güncellemeyle birlikte oluşturulsa bile, artık endişeleriniz olacak. sadece belirli bir saat için 'update' tarih saatini sorgulamak için. –