SQL:列出在两个时间段之间未售出的项目
我们使用的软件有两个订单表,orders和OrderItems。 我试图在数据库上运行一个查询,以显示哪些商品在一段时间内没有售出。 这是我拥有的,但它不起作用(它会显示所有记录)SQL:列出在两个时间段之间未售出的项目,sql,sql-server,Sql,Sql Server,我们使用的软件有两个订单表,orders和OrderItems。 我试图在数据库上运行一个查询,以显示哪些商品在一段时间内没有售出。 这是我拥有的,但它不起作用(它会显示所有记录) 改变你的约会。它应该是介于[结束日期]之间的[开始日期] WHERE (OrderItem.SKU NOT IN (SELECT DISTINCT OrderItem.SKU WHERE ([Order].OrderDate BETWEEN '2014-01-01' AND '2014-09
改变你的约会。它应该是介于[结束日期]之间的[开始日期]
WHERE (OrderItem.SKU NOT IN
(SELECT DISTINCT OrderItem.SKU
WHERE ([Order].OrderDate BETWEEN '2014-01-01' AND '2014-09-08')))
改变你的约会。它应该是介于[结束日期]之间的[开始日期]
WHERE (OrderItem.SKU NOT IN
(SELECT DISTINCT OrderItem.SKU
WHERE ([Order].OrderDate BETWEEN '2014-01-01' AND '2014-09-08')))
改变你的约会。它应该是介于[结束日期]之间的[开始日期]
WHERE (OrderItem.SKU NOT IN
(SELECT DISTINCT OrderItem.SKU
WHERE ([Order].OrderDate BETWEEN '2014-01-01' AND '2014-09-08')))
改变你的约会。它应该是介于[结束日期]之间的[开始日期]
WHERE (OrderItem.SKU NOT IN
(SELECT DISTINCT OrderItem.SKU
WHERE ([Order].OrderDate BETWEEN '2014-01-01' AND '2014-09-08')))
那么以下内容如何:
SELECT oi.Name, oi.SKU, o.OrderDate
FROM [Order] o
INNER JOIN OrderItem oi ON o.OrderID = oi.OrderID
WHERE oi.SKU NOT IN
(
SELECT os.SKU
FROM [Order] os
INNER JOIN OrderItem ois ON os.OrderID = ois.OrderID
WHERE os.OrderDate BETWEEN '2014-01-01' AND '2014-09-08'
)
您必须加入子查询中的
OrderItem
表才能获得SKU
以下内容如何:
SELECT oi.Name, oi.SKU, o.OrderDate
FROM [Order] o
INNER JOIN OrderItem oi ON o.OrderID = oi.OrderID
WHERE oi.SKU NOT IN
(
SELECT os.SKU
FROM [Order] os
INNER JOIN OrderItem ois ON os.OrderID = ois.OrderID
WHERE os.OrderDate BETWEEN '2014-01-01' AND '2014-09-08'
)
您必须加入子查询中的
OrderItem
表才能获得SKU
以下内容如何:
SELECT oi.Name, oi.SKU, o.OrderDate
FROM [Order] o
INNER JOIN OrderItem oi ON o.OrderID = oi.OrderID
WHERE oi.SKU NOT IN
(
SELECT os.SKU
FROM [Order] os
INNER JOIN OrderItem ois ON os.OrderID = ois.OrderID
WHERE os.OrderDate BETWEEN '2014-01-01' AND '2014-09-08'
)
您必须加入子查询中的
OrderItem
表才能获得SKU
以下内容如何:
SELECT oi.Name, oi.SKU, o.OrderDate
FROM [Order] o
INNER JOIN OrderItem oi ON o.OrderID = oi.OrderID
WHERE oi.SKU NOT IN
(
SELECT os.SKU
FROM [Order] os
INNER JOIN OrderItem ois ON os.OrderID = ois.OrderID
WHERE os.OrderDate BETWEEN '2014-01-01' AND '2014-09-08'
)
您必须加入子查询中的
OrderItem
表,才能获得SKU
看起来您的查询是“颠倒”生成的
SELECT DISTINCT SKU FROM OrderItem oi
WHERE NOT EXISTS
(SELECT 1 FROM Order o
JOIN OrderItem oi2 ON o.OrderID = oi2.OrderID
WHERE oi2.SKU = oi.SKU
AND o.OrderDate BETWEEN '2014-01-01' AND '2014-09-08' );
看起来您的查询是“颠倒”生成的
SELECT DISTINCT SKU FROM OrderItem oi
WHERE NOT EXISTS
(SELECT 1 FROM Order o
JOIN OrderItem oi2 ON o.OrderID = oi2.OrderID
WHERE oi2.SKU = oi.SKU
AND o.OrderDate BETWEEN '2014-01-01' AND '2014-09-08' );
看起来您的查询是“颠倒”生成的
SELECT DISTINCT SKU FROM OrderItem oi
WHERE NOT EXISTS
(SELECT 1 FROM Order o
JOIN OrderItem oi2 ON o.OrderID = oi2.OrderID
WHERE oi2.SKU = oi.SKU
AND o.OrderDate BETWEEN '2014-01-01' AND '2014-09-08' );
看起来您的查询是“颠倒”生成的
SELECT DISTINCT SKU FROM OrderItem oi
WHERE NOT EXISTS
(SELECT 1 FROM Order o
JOIN OrderItem oi2 ON o.OrderID = oi2.OrderID
WHERE oi2.SKU = oi.SKU
AND o.OrderDate BETWEEN '2014-01-01' AND '2014-09-08' );
理想情况下,您应该有另一个包含不同项目的表,这样您就可以编写以下查询,查看哪些项目在某个时期内没有售出(可能根本没有售出) 如果没有这样的表,您可以选择在某个时间点订购的所有产品,但不能选择在另一个时间段内订购的所有产品
select i.SKU from (
select distinct oi.SKU from OrderItem oi
) i
where not exists (
select 1 from OrderItem oi
join Order o on o.OrderID = oi.OrderID
where oi.SKU = i.SKU
and o.OrderDate BETWEEN '2014-01-01' and '2014-09-08'
)
理想情况下,您应该有另一个包含不同项目的表,这样您就可以编写以下查询,查看哪些项目在某个时期内没有售出(可能根本没有售出) 如果没有这样的表,您可以选择在某个时间点订购的所有产品,但不能选择在另一个时间段内订购的所有产品
select i.SKU from (
select distinct oi.SKU from OrderItem oi
) i
where not exists (
select 1 from OrderItem oi
join Order o on o.OrderID = oi.OrderID
where oi.SKU = i.SKU
and o.OrderDate BETWEEN '2014-01-01' and '2014-09-08'
)
理想情况下,您应该有另一个包含不同项目的表,这样您就可以编写以下查询,查看哪些项目在某个时期内没有售出(可能根本没有售出) 如果没有这样的表,您可以选择在某个时间点订购的所有产品,但不能选择在另一个时间段内订购的所有产品
select i.SKU from (
select distinct oi.SKU from OrderItem oi
) i
where not exists (
select 1 from OrderItem oi
join Order o on o.OrderID = oi.OrderID
where oi.SKU = i.SKU
and o.OrderDate BETWEEN '2014-01-01' and '2014-09-08'
)
理想情况下,您应该有另一个包含不同项目的表,这样您就可以编写以下查询,查看哪些项目在某个时期内没有售出(可能根本没有售出) 如果没有这样的表,您可以选择在某个时间点订购的所有产品,但不能选择在另一个时间段内订购的所有产品
select i.SKU from (
select distinct oi.SKU from OrderItem oi
) i
where not exists (
select 1 from OrderItem oi
join Order o on o.OrderID = oi.OrderID
where oi.SKU = i.SKU
and o.OrderDate BETWEEN '2014-01-01' and '2014-09-08'
)
实际上,您可以使用
having
子句来实现这一点:
SELECT oi.Name, oi.SKU, max(o.OrderDate) as lastOrderDate
FROM [Order] o INNER JOIN
OrderItem oi
ON o.OrderID = oi.OrderID
GROUP BY oi.Name, oi.SKU
HAVING sum(case when o.OrderDate between '2014-01-01' and '2014-09-08' then 1 else 0 end) = 0;
如果您只是在今年之前寻找订单,那么将having
子句编写为:
HAVING max(o.OrderDate) < '2014-01-01'
具有最大订购日期<'2014-01-01'
您实际上可以通过拥有
子句来实现这一点:
SELECT oi.Name, oi.SKU, max(o.OrderDate) as lastOrderDate
FROM [Order] o INNER JOIN
OrderItem oi
ON o.OrderID = oi.OrderID
GROUP BY oi.Name, oi.SKU
HAVING sum(case when o.OrderDate between '2014-01-01' and '2014-09-08' then 1 else 0 end) = 0;
如果您只是在今年之前寻找订单,那么将having
子句编写为:
HAVING max(o.OrderDate) < '2014-01-01'
具有最大订购日期<'2014-01-01'
您实际上可以通过拥有
子句来实现这一点:
SELECT oi.Name, oi.SKU, max(o.OrderDate) as lastOrderDate
FROM [Order] o INNER JOIN
OrderItem oi
ON o.OrderID = oi.OrderID
GROUP BY oi.Name, oi.SKU
HAVING sum(case when o.OrderDate between '2014-01-01' and '2014-09-08' then 1 else 0 end) = 0;
如果您只是在今年之前寻找订单,那么将having
子句编写为:
HAVING max(o.OrderDate) < '2014-01-01'
具有最大订购日期<'2014-01-01'
您实际上可以通过拥有
子句来实现这一点:
SELECT oi.Name, oi.SKU, max(o.OrderDate) as lastOrderDate
FROM [Order] o INNER JOIN
OrderItem oi
ON o.OrderID = oi.OrderID
GROUP BY oi.Name, oi.SKU
HAVING sum(case when o.OrderDate between '2014-01-01' and '2014-09-08' then 1 else 0 end) = 0;
如果您只是在今年之前寻找订单,那么将having
子句编写为:
HAVING max(o.OrderDate) < '2014-01-01'
具有最大订购日期<'2014-01-01'
能否提供您的表格结构。OrderItem和OrderDate中的列是什么?您可能不想在之间使用-请参阅并提供您的表结构。OrderItem和OrderDate中的列是什么?您可能不想在之间使用-请参阅并提供您的表结构。OrderItem和OrderDate中的列是什么?您可能不想在之间使用-请参阅并提供您的表结构。OrderItem和OrderDate中的列是什么?您可能不想在之间使用-请参阅,如果没有from
子句,您真的希望这样做吗?这个查询可能会像编写的那样工作,但我相信它不会返回任何行。您真的希望在没有from
子句的情况下工作吗?这个查询可能会像编写的那样工作,但我相信它不会返回任何行。您真的希望在没有from
子句的情况下工作吗?这个查询可能会像编写的那样工作,但我相信它不会返回任何行。您真的希望在没有from
子句的情况下工作吗?这个查询可能会像写的那样工作,但我相信它不会返回任何行。谢谢!但是我仍然有一个小问题,当我在没有oi.Name的情况下执行此操作时,它可以工作,但是当我添加带有确切代码的名称时,它会返回所有需要的行,而不仅仅是以前返回的行。@JayLamay。这没有意义,除非SKU
可以有多个名称。谢谢!但是我仍然有一个小问题,当我在没有oi.Name的情况下执行此操作时,它可以工作,但是当我添加带有确切代码的名称时,它会返回所有需要的行,而不仅仅是以前返回的行。@JayLamay。这没有意义,除非SKU
可以有多个名称。谢谢!但是我仍然有一个小问题,当我在没有oi.Name的情况下执行此操作时,它可以工作,但是当我添加带有确切代码的名称时,它会返回所有需要的行,而不仅仅是以前返回的行。@JayLamay。这没有意义,除非SKU
可以有多个名称。谢谢!但是我仍然有一个小问题,当我在没有oi.Name的情况下执行此操作时,它可以工作,但是当我添加带有确切co的名称时