2012-10-31 19 views
10

http://sqlfiddle.com/#!2/6a6b1MYSQL - uzyskanie sumy przez miesiąc

Program jest podany powyżej .. wszystko chcę zrobić jest uzyskać wyniki w sumie sprzedaży/miesiąc ... użytkownik będzie wprowadzić datę początkową i datę końcową i mogę wygenerować (w php) cały miesiąc i lata dla tych dat. na przykład, jeśli chcę znać całkowitą liczbę "sprzedaży" przez 12 miesięcy, wiem, że mogę uruchomić 12 indywidualnych zapytań z datą rozpoczęcia i zakończenia ... ale chcę uruchomić tylko jedno zapytanie, w którym wynik będzie wyglądał następująco:

Month  numofsale 
January - 2 
Feb-1 
March - 23 
Apr - 10 

itd ..

lub po prostu lista sprzedaży z obecnie miesiącach mogę następnie powiązać go do tablicy miesięcy generowane w php ... wszelkich pomysłów ....

Edycja/schemat i dane wklejone z sqlfiddle.com:

CREATE TABLE IF NOT EXISTS `lead_activity2` (
    `lead_activity_id` int(11) NOT NULL AUTO_INCREMENT, 
    `sp_id` int(11) NOT NULL, 
    `act_date` datetime NOT NULL, 
    `act_name` varchar(255) NOT NULL, 
    PRIMARY KEY (`lead_activity_id`), 
    KEY `act_date` (`act_date`), 
    KEY `act_name` (`act_name`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ; 

INSERT INTO `lead_activity2` (`lead_activity_id`, `sp_id`, `act_date`, `act_name`) VALUES 
(1, 5, '2012-10-16 16:05:29', 'sale'), 
(2, 5, '2012-10-16 16:05:29', 'search'), 
(3, 5, '2012-10-16 16:05:29', 'sale'), 
(4, 5, '2012-10-17 16:05:29', 'DNC'), 
(5, 5, '2012-10-17 16:05:29', 'sale'), 
(6, 5, '2012-09-16 16:05:30', 'SCB'), 
(7, 5, '2012-09-16 16:05:30', 'sale'), 
(8, 5, '2012-08-16 16:05:30', 'sale'), 
(9, 5,'2012-08-16 16:05:30', 'sale'), 
(10, 5, '2012-07-16 16:05:30', 'sale'); 
+0

Widzę tworzenie tabel i wstawianie fałszywego kodu danych, co wypróbowałeś dla instrukcji "select"? – cctan

Odpowiedz

22
SELECT DATE_FORMAT(date, "%m-%Y") AS Month, SUM(numofsale) 
FROM <table_name> 
WHERE <where-cond> 
GROUP BY DATE_FORMAT(date, "%m-%Y") 

Sprawdź następujące w demo skrzypce to działa na mnie (usunąć where klauzuli do testowania)

SELECT DATE_FORMAT(act_date, "%m-%Y") AS Month, COUNT(*) 
FROM lead_activity2 
WHERE <where-cond-here> AND act_name='sale' 
GROUP BY DATE_FORMAT(act_date, "%m-%Y") 

zwraca następujący rezultat

MONTH COUNT(*) 
07-2012 1 
08-2012 2 
09-2012 1 
10-2012 3 
+0

Możesz użyć 'DATE_FORMAT (act_date,"% M-% Y ")' dla 'July-2012' Ref: - http://dev.mysql.com/doc/refman/5.5/en/date-and-time -functions.html # function_date formacie – Salil

+2

to nie będą wyświetlane w rezultacie miesiąc gdzie liczba sprzedaży jest zerowy – ursuleacv

0

spróbować tej kwerendy -

SELECT 
    MONTH(act_date) month, COUNT(*) 
FROM 
    lead_activity2 
WHERE 
    YEAR(act_date) = 2012 AND act_name = 'sale' 
GROUP BY 
    month 

Sprawdź warunek WHERE, czy jest OK - act_name = 'sale'.

Jeśli chcesz nazwami wyjście miesiąc, a następnie użyć MONTHNAME() funkcja zamiast MIESIĄC().

+0

dobrze i zmęczony tym SELECT ekstraktu (miesiąc od act_date) za miesiąc, EXTRACT (YEAR FROM act_date) za rok, COUNT (*) FROM lead_activity2 GDZIE act_name = "sprzedaż" GROUP BY miesięcy, roku ORDER BY roku DESC, miesięcy DESC –

+0

dev działa zapytanie .... ale Zgaduję, że rozwiązanie, które napisałem, było bardziej kompletne, ponieważ wygląda na to, że robiłem sortowanie i takie ... ... wybiorą twoje –

0
SELECT YEAR(act_date), MONTH(act_date), COUNT(*) 

FROM lead_activity2 

GROUP BY YEAR(act_date), MONTH(act_date) 

Aby uzyskać dane według miesięcy lub dowolnych innych danych w oparciu o kolumnę, należy dodać GROUP BY.

Możesz dodać wiele kolumn lub wartości wyliczonych do GROUP BY.

Zakładam, że "liczba sprzedaży" oznacza liczbę wierszy.

1

Można spróbować zapytać, jak podano poniżej

select SUM(`SP_ID`) AS `Total` , DATE_FORMAT(act_date, "%M") AS Month, Month(`ACT_DATE`) AS `Month_number` from `lead_activity2` WHERE `ACT_DATE` BETWEEN '2012-05-01' AND '2012-12-17' group by Month(`ACT_DATE`) 

Tutaj 2012-05-01 i 2012-12-17 są datę wejścia z formularza. i Zwróci ci sumę sprzedaży za dany miesiąc, jeśli istnieje w bazie danych.

dzięki

0

Czasami warto nazwy miesiąca Jan, Feb, Mar .... Dec ewentualnie na wykresie jak FusionChart

SELECT DATE_FORMAT(date, "%M") AS Month, SUM(numofsale) 
FROM <Table_name> 
GROUP BY DATE_FORMAT(date, "%M") 

Wyniki będzie wyglądać to na stole

MONTH COUNT(*) 
Jul  1 
Aug  2 
SEP  1 
OCT  3 
Powiązane problemy