Portál AbcLinuxu, 12. května 2025 16:39

Dotaz: SQL sum podľa mesiacov

14.4.2011 16:31 eth4rendil | skóre: 13
SQL sum podľa mesiacov
Přečteno: 542×
Odpovědět | Admin
Dobrý deň,

mám problém s nasledovnou query (db je mysql):
SELECT name         AS meno,
       SUM(price)   AS suma,
       MONTH(dtime) AS mesiac,
       YEAR(dtime)  AS rok
FROM   ca_calls
WHERE  DATE_SUB(CURDATE(),INTERVAL 6 MONTH) < DATE(dtime)
GROUP  BY name,
          MONTH(dtime),
          YEAR(dtime)
ORDER  BY name,
          YEAR(dtime) DESC,
          MONTH(dtime) DESC  
Query spočítava sumy v price podľa mena, mesiaca a roku. štruktúra tabuľky je nasledovná:
DROP TABLE IF EXISTS `rhs`.`ca_calls`;
CREATE TABLE  `rhs`.`ca_calls` (
  `id` int(15) unsigned NOT NULL AUTO_INCREMENT,
  `number` int(10) unsigned zerofill NOT NULL,
  `name` varchar(255) COLLATE utf8_slovak_ci NOT NULL,
  `called` varchar(50) COLLATE utf8_slovak_ci DEFAULT NULL,
  `what` varchar(255) COLLATE utf8_slovak_ci NOT NULL,
  `duration` time NOT NULL,
  `type_call` varchar(8) COLLATE utf8_slovak_ci NOT NULL,
  `type_service` char(1) COLLATE utf8_slovak_ci NOT NULL,
  `price` float(6,4) NOT NULL,
  `volume` int(12) unsigned NOT NULL,
  `dtime` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=427521 DEFAULT CHARSET=utf8 COLLATE=utf8_slovak_ci;
Je to tabuľka s výpisom hovorov. Problém mám vždy s posledným mesiacom v rade teraz momentálne 2010-10. Sumu nespočíta správne.

Ak vykonám nasledovný prikaz:
SELECT SUM(price)
FROM   ca_calls
WHERE  name = 'ADMIN 01'
       AND YEAR(dtime) = '2010'
       AND MONTH(dtime) = '10'
tak je suma iná - vyššia ako pri prvej query. Vedel by mi niekto poradiť kde robím chybu? Popr. ak by mi niekto vedel poradiť aj ako by som vedel dostať výsledok - niečo ako pivot table. Teda výsledok query by zobrazoval posledných sumu za 6 mesiacov - mená by boli v riadkoch. Niečo takéto:
Meno    2011-03  2011-02  2011-01  2010-12  2010-11  2010-10
Admin01    20.0     15.0     21.0     30.5     11.1     15.1
Admin02    22.0     25.0     51.0     32.5     51.1     55.1
Admin03    26.0     65.0     61.0     36.5     21.1     45.1
Výstup z prvej query transformujem do takejto tabuľky na aplikačnej vrstve a trvá to viac ako je prípustné(tabuľka má cca 600k riadkov). Ďakujem pekne za radu

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Řešení 1× (eth4rendil (tazatel))
14.4.2011 19:01 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: SQL sum podľa mesiacov
Odpovědět | | Sbalit | Link | Blokovat | Admin
V podmínce WHERE počítáte 6 měsíců zpět od aktuálního data, takže dnes např. od 14. září 2010. Takže se vám tam září nezapočítá celé, ale jen od 15. Musíte tu podmínku upravit tak, aby se vám zarovnávala na celé měsíce.
19.4.2011 09:15 eth4rendil | skóre: 13
Rozbalit Rozbalit vše Re: SQL sum podľa mesiacov
dakujem. Vobec ma to nenapadlo
Johny z Podoli avatar 19.4.2011 12:19 Johny z Podoli | skóre: 26 | blog: rocfdebian
Rozbalit Rozbalit vše Re: SQL sum podľa mesiacov
Odpovědět | | Sbalit | Link | Blokovat | Admin
Omlouvám se za spam, netušíte, jak "groupovat" podle dne, měsíce, roku v FirebirdSQL? mám taktéž jeden sloupcec "DATUM" (YYYY-MM-DD) a potřebuji také sčítat...

děkuji převelice ;-)
Můj web o táborech: Letní dětské tábory, Hudební tábor , Můj nový blog na Nul.cz

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.