如果事情变得非常简单,请提前道歉,但我是SQL的新手
我需要帮助为包含AccountCodes和OrderDates列表的数据库构建查询。每个订单都包含在此数据库中。
我可以生成一个查询,它会给我在2015年之前订购的所有内容,但如果他们订购了之后它会忽略。这也给了我重复的帐户代码,这是没有用的,因为我需要使用此列表来执行另一个功能。
我正在寻求的是一个查询,它会在2015-01-01之前向我提供最后订单的任何帐号,而不会重复任何帐号。
提前致谢
答案 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子句。