MYSQL MAX / COUNT / IN / TARİH

2 Cevap php

Eğer tavsiyelerde umuyoruz. Im bir sorguya saçımı çekerek ve tavsiyelerde umuyoruz.

Ben bir IN tarihleri ​​arasında bir iç sayımı MAX seçmek istediğiniz bir tablo var.

View Table

İşte ne denedim ama hayır şans ile tüm.

SELECT MAX(no_hits) from (SELECT count(hits) AS 'no_hits' ) FROM stats WHERE 'date' >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH AND zones_code IN('011242077793513596890', '011242077783866125432'))

Yani temelde sadece bir no_hits iyi performans bölge için geri istiyorum.

Eğer yanlış im gidiş nereye tavsiye umuyoruz.

Sen cam eğer ve teşekkür ederim

2 Cevap

Sorgunuz şudur:

SELECT MAX(no_hits) 
FROM (SELECT count(hits) AS 'no_hits' ) FROM stats 
  WHERE 'date' >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH 
    AND zones_code IN('011242077793513596890', '011242077783866125432')
);

İşte sorgu ile yanlış bazı şeyler şunlardır:

  • Sen 'no_hits' sonra sorgu parantez kapattı.
  • Sen alt sorgu için bir tablo diğer adı arz etmedi. Her türetilmiş tablo bir tablo diğer adı olmalıdır.
  • Sen DATE_SUB() fonksiyonu için parantez kapatın vermedi.
  • Sen COUNT() Sana bölge başına isabet toplam istiyorsanız, SUM() kullanmak gerektiğini düşünüyorum yerlerde kullanılır.
  • Her bölge ile hit alt toplamını ilişkilendirme değil; Lütfen subtotal bütün tablo için.
  • Sen ('') 'date' yerine tanımlayıcı sınırlandırıcıları (yani arka-tırnak) ve için dize sınırlayıcı kullanılır. Sen literal dize 'date' bir tarih değerine, karşılaştırarak konum bir tarih değerine sütun date karşılaştırmak ifade ederken.

@ Chaos yanıtında sorgu yakın, ama kullanmak gerektiğini düşünüyorum SUM():

SELECT `zones_code`, SUM(`hits`) AS `no_hits`
FROM `stats`
WHERE `date` >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH)
GROUP BY `zones_code`
ORDER BY `no_hits` DESC
LIMIT 1;

Sonuç 255 hit toplam, zone_code 011242077793513596890 olduğunu.


PS: Eğer Online soru sormak, kolayca test insanlar için in textual format yeterince kod ve veri kaynağı lütfen. Bazı örnek bir veri ekran tedarik ve tablo oluşturma kodunu göstermeden. Bunu doldurmak için geçerli bir CREATE TABLE deyimi ve bir örnek INSERT deyimi verilen vardı sanki bu kadar yararlı değildir.

CREATE TABLE IF NOT EXISTS `stats` (
  `id` int(11) NOT NULL,
  `zones_code` char(21) default NULL,
  `date` date default NULL,
  `hits` int(11) default NULL,
  PRIMARY KEY  (`id`)
);

INSERT INTO stats VALUES
(10, '011242077793513596890', '2009-05-11', 13),
(12, '011242077793513596890', '2009-05-12',235),
(24, '011242077793513596890', '2009-05-13',  2),
(32, '011242077793513596890', '2009-05-14',  5),
(17, '011242077783866125432', '2009-05-12',165),
(22, '011242077783866125432', '2009-05-13',  2),
(30, '011242077783866125432', '2009-05-14',  5),
(19, '011242077743853330663', '2009-05-12', 61),
(20, '011242077737314753388', '2009-05-12', 54),
(28, '011242077737314753388', '2009-05-13',  7),
(36, '011242077737314753388', '2009-05-14', 31),
(14, '011242077730456603312', '2009-05-12',240),
(26, '011242077730456603312', '2009-05-13',  2),
(34, '011242077730456603312', '2009-05-14',  5);

Yukarıdaki Ben ekran çekimde dayalı yazın buydu!

Do yourself a favor and make it easier for people to help you.

Ben sadece maksimum değeri elde etmek için bir LIMIT 1 ile ORDER BY DESC sipariş madde kullanmak istiyorsunuz.