Mysql:获取多个日期范围之间的分段记录

Navjot Singh |

表结构和样本数据

CREATE TABLE IF NOT EXISTS `orders` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `customer_id` int(11) NOT NULL,
  `restaurant_id` int(11) NOT NULL,
  `bill_id` int(11) NOT NULL,
  `source_id` int(1) NOT NULL,
  `order_medium_id` int(11) NOT NULL,
  `purchase_method` varchar(255) NOT NULL,
  `totalamount` int(11) NOT NULL,
  `delivery_charg` int(11) NOT NULL,
  `discount` int(11) NOT NULL,
  `vat` int(11) NOT NULL,
  `total_price` int(11) NOT NULL DEFAULT '0',
  `date_created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `customer_id` (`customer_id`),
  KEY `source_id` (`source_id`),
  KEY `restaurant_id` (`restaurant_id`),
  KEY `bill_id` (`bill_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=22 ;

--
-- Dumping data for table `orders`
--

INSERT INTO `orders` (`id`, `customer_id`, `restaurant_id`, `bill_id`, `source_id`, `order_medium_id`, `purchase_method`, `totalamount`, `delivery_charg`, `discount`, `vat`, `total_price`, `date_created`) VALUES
(1, 1, 1, 1, 1, 0, 'cash', 1600, 0, 0, 0, 1600, '2016-05-29 13:05:40'),
(2, 1, 1, 2, 2, 1, 'cash', 1820, 0, 0, 0, 1820, '2016-06-27 07:21:25'),
(4, 1, 1, 3, 3, 0, 'cash', 1770, 0, 0, 0, 1770, '2016-05-31 13:05:56'),
(5, 1, 1, 4, 2, 1, 'cash', 1300, 0, 0, 0, 1300, '2016-06-27 07:21:31'),
(6, 1, 1, 5, 1, 0, 'cash', 950, 0, 0, 0, 950, '2016-06-02 13:06:15'),
(7, 1, 1, 6, 1, 0, 'cash', 1640, 0, 0, 0, 1640, '2016-06-03 13:06:24'),
(8, 1, 1, 7, 2, 2, 'cash', 1600, 0, 0, 0, 1600, '2016-06-27 07:21:36'),
(9, 1, 1, 8, 2, 2, 'cash', 1575, 0, 0, 0, 1575, '2016-06-27 07:21:40'),
(10, 1, 1, 9, 3, 0, 'cash', 1125, 0, 0, 0, 1125, '2016-06-06 13:06:48'),
(11, 1, 1, 10, 2, 3, 'cash', 1920, 0, 0, 0, 1920, '2016-06-27 07:21:51');

要求 :

I want to segment records as per customer as following. 
1. customers who ordered in last 2 week then give ratingflag 5
2. customers who ordered between 2 weeks to 4 week then give ratingflag 3
3. customers who ordered between 4 weeks to 8 week then give ratingflag 2
and so on.

客户应该是唯一的。我们编写查询以根据需要获取记录。我的表中没有太多数据,因此我根据数据对条件进行了更改。

我尝试跟随。如果您能通过更好的方法帮助我,我将不胜感激:

查询我试过

select customer_id,rating from (select `customer_id`,5 as rating from orders where `restaurant_id` = 1 and  (DATE(`date_created`) between DATE(DATE_SUB(NOW(), INTERVAL 1 DAY)) AND DATE(NOW())) GROUP BY customer_id
UNION ALL
select `customer_id`,4 as rating from orders where `restaurant_id` = 1 and  (DATE(`date_created`) BETWEEN DATE(DATE_SUB(NOW(), INTERVAL 4 DAY)) AND DATE(DATE_SUB(NOW(), INTERVAL 2 DAY))) GROUP BY customer_id
UNION ALL
select `customer_id`,3 as rating from orders where `restaurant_id` = 1 and  (DATE(`date_created`) BETWEEN DATE(DATE_SUB(NOW(), INTERVAL 8 DAY)) AND DATE(DATE_SUB(NOW(), INTERVAL 5 DAY))) GROUP BY customer_id
UNION ALL
select `customer_id`,2 as rating from orders where `restaurant_id` = 1 and  (DATE(`date_created`) BETWEEN DATE(DATE_SUB(NOW(), INTERVAL 20 DAY)) AND DATE(DATE_SUB(NOW(), INTERVAL 9 DAY))) GROUP BY customer_id
UNION ALL
select `customer_id`,1 as rating from orders where `restaurant_id` = 1 and  (DATE(`date_created`) BETWEEN DATE(DATE_SUB(NOW(), INTERVAL 40 DAY)) AND DATE(DATE_SUB(NOW(), INTERVAL 21 DAY))) GROUP BY customer_id) as temp group by customer_id order by rating desc;
戈登·利诺夫(Gordon Linoff)

嗯,我想您只想要最新订单的日期和大案子声明。像这样的东西:

select o.customer_id,
       (case when max(date_created) >= date_sub(now(), interval 2 week) then 1
             when max(date_created) >= date_sub(now(), interval 4 week) then 2
             when max(date_created) >= date_sub(now(), interval 8 week) then 3
             . . .
        end) as rating
from orders o
group by o.customer_id;

请注意,case评估按顺序评估条件。这就是为什么between没有必要的原因。第一个匹配条件结束的处理case

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在MYSQL中获取两个日期范围之间的记录

来自分类Dev

MySQL从多个获取最后日期记录

来自分类Dev

MySQL从多个获取最后日期记录

来自分类Dev

获取两个日期范围之间的记录

来自分类Dev

查找日期范围之间的记录

来自分类Dev

查找日期范围之间的记录

来自分类Dev

MySQL索引获取用于范围的2列之间的记录

来自分类Dev

MySQL PHP获取记录数字在两个范围之间

来自分类Dev

日期之间的JavaScript过滤以获取特定日期范围内的记录

来自分类Dev

MySQL:选择日期范围之间的所有日期,并获取匹配日期的表数据

来自分类Dev

查找日期范围之间的丢失记录

来自分类Dev

查找跨越记录的日期范围之间的差距

来自分类Dev

MySQL日期和间隔-日期之间的记录

来自分类Dev

获取介于日期范围之间或超出日期范围的任务

来自分类Dev

如何计算多个日期之间的记录数

来自分类Dev

从SQL Server中的多个表获取两个日期之间的记录

来自分类Dev

使用mysql获取在日期范围内具有有效记录的用户

来自分类Dev

使用mysql获取从日期到日期的记录

来自分类Dev

Rails 4范围:获取相反范围之间的所有记录

来自分类Dev

SQL:从多个开始日期和结束日期获取范围日期

来自分类Dev

mysql-如何获取两个时间范围之间的随机时间(而非日期)

来自分类Dev

总和值如果日期在多个日期范围(矩阵)之间

来自分类Dev

如何在mysql的日期列中使用多个where条件时获取记录

来自分类Dev

日期范围从多个记录(重叠)的工作日总数

来自分类Dev

日期范围从多个记录(重叠)的工作日总数

来自分类Dev

PHP Mysql在时间范围之间获取差距

来自分类Dev

MySQL获取实现计数的记录日期

来自分类Dev

如何获取MYSQL中同一列中多个日期之间的平均天数

来自分类Dev

MySQL:获取多个条目在两个日期之间的变化百分比

Related 相关文章

  1. 1

    在MYSQL中获取两个日期范围之间的记录

  2. 2

    MySQL从多个获取最后日期记录

  3. 3

    MySQL从多个获取最后日期记录

  4. 4

    获取两个日期范围之间的记录

  5. 5

    查找日期范围之间的记录

  6. 6

    查找日期范围之间的记录

  7. 7

    MySQL索引获取用于范围的2列之间的记录

  8. 8

    MySQL PHP获取记录数字在两个范围之间

  9. 9

    日期之间的JavaScript过滤以获取特定日期范围内的记录

  10. 10

    MySQL:选择日期范围之间的所有日期,并获取匹配日期的表数据

  11. 11

    查找日期范围之间的丢失记录

  12. 12

    查找跨越记录的日期范围之间的差距

  13. 13

    MySQL日期和间隔-日期之间的记录

  14. 14

    获取介于日期范围之间或超出日期范围的任务

  15. 15

    如何计算多个日期之间的记录数

  16. 16

    从SQL Server中的多个表获取两个日期之间的记录

  17. 17

    使用mysql获取在日期范围内具有有效记录的用户

  18. 18

    使用mysql获取从日期到日期的记录

  19. 19

    Rails 4范围:获取相反范围之间的所有记录

  20. 20

    SQL:从多个开始日期和结束日期获取范围日期

  21. 21

    mysql-如何获取两个时间范围之间的随机时间(而非日期)

  22. 22

    总和值如果日期在多个日期范围(矩阵)之间

  23. 23

    如何在mysql的日期列中使用多个where条件时获取记录

  24. 24

    日期范围从多个记录(重叠)的工作日总数

  25. 25

    日期范围从多个记录(重叠)的工作日总数

  26. 26

    PHP Mysql在时间范围之间获取差距

  27. 27

    MySQL获取实现计数的记录日期

  28. 28

    如何获取MYSQL中同一列中多个日期之间的平均天数

  29. 29

    MySQL:获取多个条目在两个日期之间的变化百分比

热门标签

归档