简体   繁体   中英

How to filter the total sales record every month using sql query?

I am generating a sales report and I am having a hard time with the query. I am not really good in query. I hope you can help me with this. Ok here it is.

I have a sales table. And the structure is like this EX:

product_id       name             date_purchased
1                apple          2014-01-03 12:00:59
2                orange         2014-01-05 10:12:20
3                banana         2014-02-01 09:25:01
4                mango          2014-02-20 18:13:25
5                stawberry      2014-02-28 13:14:30
6                jackfruit      2014-05-26 08:16:31
7                grapes         2014-11-03 09:25:21
8                guava          2014-12-25 10:15:45

Now I want to count the item purchased every month My output result should be like this

2,3,0,0,1,0,0,0,0,0,1,1

2 represents Jan, 3 represents Feb, etc...

My query looks like this but I know it is wrong.. :(

SELECT COUNT(product_id) FROM sales_table GROUP BY date_purchased

How can I do that using a query? Or should I make a PHP function for this?

try like this :

SELECT year(date_purchased), month(date_purchased), COUNT(product_id) 
FROM sales_table 
GROUP BY concat(year(date_purchased), month(date_purchased))

The SQL query is enough. You have to use group by. But first make a month column for your table.

create function byMonth(@myDate datetime)
    returns datetime
as
    begin
    declare @newDate
    set @newDate = year(@myDate) + '/' + month(@myDate) + '/1 00:00:00'
    return @newDate
    end
go

and use this in your query:

Select Count(*),byMonth(date_puchased) as x
from myTable
where ...
group by x
having ...

this should work for you.

I think you can retrieve the dates and use PHP as it is pretty straight forward.

Once you have a date lets say for example,

$date_str = "2014-01-03 12:00:59"; //let's say you fetch this from DB
$month = date('m',strtotime($date_str)); //this will automatically output 1

You mentioned, 2 represents Jan, 3 represents Feb etc, so you can just add 1 to $month and you have what you need.

希望它能工作

SELECT COUNT(product_id) FROM sales_table GROUP BY DATENAME(month, date_purchased)

More elaborated solutions

To get Month - wise

SELECT COUNT(id) FROM testrec GROUP BY DATE_FORMAT(pur,'%M');

Get all details

SELECT COUNT(product_id),`name` , date_purchased, DATE_FORMAT(date_purchased,'%M') FROM sales_table GROUP BY DATE_FORMAT(pur,'%M');

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM