I'm stuck, this job seems too complicated for me I hope in some goodness help here! So this is my table `views`: +---+--------------------+ | id| time| +---+--------------------+ | 1 | 2016-10-06 10:13:11| | 2 | 2016-10-07 15:33:31| | 3 | 2016-10-08 20:13:13| | 4 | 2016-10-09 09:16:21| | 5 | 2016-10-10 18:23:17| | . | ...| +---+--------------------+ I need to select in array the rows count of each day for the last 2 weeks and compare them (so I need to compare monday of current week and previous week). So I tried: SELECT 'last_week' AS week, COUNT(*) AS rows FROM `views` WHERE `time` >= CURDATE() - INTERVAL 6 DAY AND `time` < CURDATE() + INTERVAL 1 DAY UNION ALL SELECT 'previous_week' AS week, COUNT(*) AS rows FROM `views` WHERE `time` >= CURDATE() - INTERVAL 13 DAY AND `time` < CURDATE() - INTERVAL 6 DAY; But it counts rows of each weeks and not single days. Yes, I can add eg. `AND DAYOFWEEK(`time`) = 7;` to the query, but in this case I have to declared it for seven times. Basically I need something like: +---------------+--------------------+ | week | 1| 2| 3| 4| 5| 6| 7| +---------------+--+--+--+--+--+--+--+ | last_week | 1| 5| 3|15|12| 1| 3| | previous_week |10|15|34|22|55|78|99| +---------------+--+--+--+--+--+--+--+ Where 1 is Monday, 7 Sunday.