2011-05-11 13 views

cevap

48

Bu nasıl? DATE fonksiyonunu kullanarak:

SELECT DATE(FROM_UNIXTIME(MyTimestamp)) AS ForDate, 
     COUNT(*) AS NumPosts 
FROM MyPostsTable 
GROUP BY DATE(FROM_UNIXTIME(MyTimestamp)) 
ORDER BY ForDate 

Bu, tablo için veri vardır, her tarih mesajların sayısını gösterecektir.

+0

Cevabımı buldum, ancak cevabınız yanlış, dönüş null, doğru: 'DATE (FROM_UNIXTIME (timestamp))' –

+0

Düzenlenen cevabınız doğru, teşekkürler –

+1

@ p.campbell: her tarih için satırları nasıl sınırlandırabiliriz ? örnek: '2011-05-11' için ben 10 yazı var ve' 2011-05-12' 20 yazı için, ben her tarih için '2 yazı 'göstermek istiyorum, bana yardımcı olabilir misiniz? –

0
SELECT 
    * 
FROM 
(
    SELECT DATE(FROM_UNIXTIME(MyTimestamp)) AS ForDate, 
      ROW_NUMBER() OVER (PARTITION BY DATE(FROM_UNIXTIME(MyTimestamp)) ORDER BY MyTimeStamp) AS PostRowID, 
      * 
    FROM MyPostsTable 
) 
    AS sequenced_daily_posts 
WHERE 
    ForDate = <whatever date(s) you want> 
    AND PostRowID <= 2 
+0

Teşekkürler, ama son yorumuma bakın: 'Sadece her tarihte son yazılanların 2'sini göstermek istiyorum 'bence bu sorgu yalnızca yayınlandığı tarihte 2 yayın yazıyor –

+0

Sorguladım ve sözdizimi hatası verdi. TARİHİNE GÖRE (FROM_UNIXTIME (MyTimestamp))) –

+0

Bir günde 1 gönderi varsa, o gün için bir yayın gösterilir. Bir günde 2 yayın varsa, o gün için her iki yayını da gösterir. Bir günde 3 veya daha fazla yayın varsa, o gün için yalnızca ilk 2 yayın gösterilir. (Her günün son iki mesajını göstermesi için SİPARİŞE GÖRE ekleyin.) Günde 2 güne kadar olan bu limitin yüz gününüz olup olmadığına, toplamda 200 adete kadar kayıt yapmanıza gerek yoktur. – MatBailie

24
SELECT DATE(timestamp) AS ForDate, 
     COUNT(*) AS NumPosts 
FROM user_messages 
GROUP BY DATE(timestamp) 
ORDER BY ForDate 

Bu benim için bulundu. "2013-03-27 15:46:08" gibi zaman damgası var.

+0

This MySQL 5.1.52'de çalıştı.DATE (FROM_UNIXTIME (MyTimestamp)) önceki cevapta null döndü. –