mysql - 查询日期范围内的帮助,但不是最近的

标签 mysql

我知道这可以写成单个 SQL 语句,但我只是不知道该怎么做。我有两个单独的查询。 Ont 会提取去年特定时期的所有订单

SELECT * FROM `order` WHERE date_added BETWEEN '2014-10-01' AND '2014-11-01';

以及上个月的内容

SELECT * FROM `order` WHERE date_added BETWEEN DATE_SUB( now(), INTERVAL 1 MONTH) AND Now() ORDER BY date_added ASC

我现在想要做的是将两者连接起来,以便我只获取去年日期范围内下的订单的 customer_id(查询 1),但上个月没有下订单(查询2)。

我知道有一种方法可以将其设置为连接,但我对 sql 连接的知识不是很有限。感谢您的帮助。

最佳答案

http://sqlfiddle.com/#!9/35ed0/1

SELECT * FROM `order` 
WHERE date_added BETWEEN '2014-10-01' AND '2014-11-01'
   AND customer_id NOT IN (
   SELECT DISTINCT customer_id  FROM `order` 
   WHERE date_added BETWEEN DATE_SUB( now(), INTERVAL 1 MONTH) AND Now())

更新 如果您只需要每个 customer_id 1 条记录,则为 an example 。从性能角度来看,这并不是最好的。但它仅返回每个客户的最后一个订单(根据 date_added 列)。

SELECT t.*,
   if(@fltr=customer_id, 0, 1) fltr,
   @fltr:=customer_id
FROM (SELECT *
  FROM `order` 
  WHERE date_added BETWEEN '2014-10-01' AND '2014-11-01'
    AND customer_id NOT IN (
     SELECT DISTINCT customer_id  FROM `order` 
     WHERE date_added BETWEEN DATE_SUB( now(), INTERVAL 1 MONTH) AND Now())
  ORDER BY customer_id, date_added DESC
) t
HAVING (fltr=1);

关于mysql - 查询日期范围内的帮助,但不是最近的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33086026/

相关文章:

php - 当有人关闭浏览器窗口时是否可以运行 php 函数?

mysql - 统计数据 - 来自 MySQL 表的每日模式,包含数字和日期

mysql - 数据库索引创建与用户为表创建索引

mysql - 如何根据主键仅在不存在的情况下插入记录? (与查询本身而不是表进行比较)

MySQL UPDATE 和 JOIN 在同一个表上

mysql - 选择最后不同的行 mysql

php - 将数组的值插入 MYSQL

php - 数据更改后重置 memcache 关键数据

php - 通过 IP 显示国家标志

php - Codeigniter form_validation 总是返回 false