SQL Query返回仅在(x)日期之前订购的帐号列表

时间:2018-02-01 12:02:14

标签: mysql sql sorting

如果事情变得非常简单,请提前道歉,但我是SQL的新手

我需要帮助为包含AccountCodes和OrderDates列表的数据库构建查询。每个订单都包含在此数据库中。

我可以生成一个查询,它会给我在2015年之前订购的所有内容,但如果他们订购了之后它会忽略。这也给了我重复的帐户代码,这是没有用的,因为我需要使用此列表来执行另一个功能。

我正在寻求的是一个查询,它会在2015-01-01之前向我提供最后订单的任何帐号,而不会重复任何帐号。

提前致谢

3 个答案:

答案 0 :(得分:0)

一般的想法是:

select whatever
from wherever
where some conditions are met
and not exists
(
subquery to identify the records after x date
)

第一部分就是你所说的你已经拥有的。

编辑从此处开始

以上内容将满足您问题的only before x date部分。关于重复的帐户代码,根据需要的其他字段,在此查询中可能存在也可能不存在。但是,有一些方法可以创建一个不同的列表。这取决于很多事情,你的问题都不包含这些内容。

答案 1 :(得分:0)

SELECT DISTINCT
  AccountCodes,
  OrderDates
FROM
  `table`
WHERE
  (OrderDates <= '2015-01-01') AND OrderDates NOT IN(
  SELECT
    AccountCodes,
    OrderDates
  FROM
    'table'
  WHERE
    OrderDates > '2015-01-01'
)

答案 2 :(得分:0)

假设您的订单表中有auto_increment id,您可以使用子查询仅使用max子句选择您感兴趣的那些

MariaDB [sandbox]> select aw.salesorderid,aw.customerid, aw.orderdate
    -> from awsalesorderheader aw
    -> where  aw.customerid in (11001,11002,12368);
+--------------+------------+---------------------+
| salesorderid | customerid | orderdate           |
+--------------+------------+---------------------+
|        43767 |      11001 | 2005-07-18 00:00:00 |
|        51493 |      11001 | 2007-07-20 00:00:00 |
|        72773 |      11001 | 2008-06-12 00:00:00 |
|        43736 |      11002 | 2005-07-10 00:00:00 |
|        51238 |      11002 | 2007-07-04 00:00:00 |
|        53237 |      11002 | 2007-08-27 00:00:00 |
|        71664 |      12368 | 2008-05-30 00:00:00 |
+--------------+------------+---------------------+
7 rows in set (0.00 sec)

MariaDB [sandbox]>
MariaDB [sandbox]> select aw.salesorderid,aw.customerid, aw.orderdate
    -> from awsalesorderheader aw
    -> where  salesorderid = (select max(aw1.salesorderid) from awsalesorderheader aw1 where aw1.CustomerID = aw.customerid
    -> and aw1.orderdate < '2008-01-01' and aw.customerid in (11001,11002,12368))
    -> order by aw.customerid;
+--------------+------------+---------------------+
| salesorderid | customerid | orderdate           |
+--------------+------------+---------------------+
|        51493 |      11001 | 2007-07-20 00:00:00 |
|        53237 |      11002 | 2007-08-27 00:00:00 |
+--------------+------------+---------------------+
2 rows in set (0.19 sec)

如果你没有auto_increment id,那么你可以在where和sub查询中用orderdate替换id,但是你可能需要在select中添加一个distinct子句。