SQL如何从所有客户检索上一次订购的2种产品?
这是我当前的查询:SQL如何从所有客户检索上一次订购的2种产品?,sql,sql-server,datetime,where-clause,greatest-n-per-group,Sql,Sql Server,Datetime,Where Clause,Greatest N Per Group,这是我当前的查询: SELECT c.name, c.email, c.phone, sol.description, so.orderDate FROM SalesOrderLine sol JOIN SalesOrder so ON sol.salesOrderID = so.id JOIN Customer c ON so.customerID = c.id WHERE (orderDate >= '2020-05-01' AND
SELECT
c.name, c.email, c.phone, sol.description, so.orderDate
FROM
SalesOrderLine sol
JOIN
SalesOrder so ON sol.salesOrderID = so.id
JOIN
Customer c ON so.customerID = c.id
WHERE
(orderDate >= '2020-05-01' AND orderDate <= '2020-09-09')
AND (description LIKE '%Seed Mix%' OR description LIKE '%Sesame Seeds (Natural)%')
ORDER BY
c.name
选择
c、 姓名,c.电子邮件,c.电话,sol.description,so.orderDate
从…起
销售订单线
参加
SalesOrder so ON sol.salesOrderID=so.id
参加
客户c ON so.customerID=c.id
哪里
(orderDate>='2020-05-01'和orderDate您可以使用行号()
使用orderbyname
而不使用c.
@Popeye:谢谢。另外,两种产品都没有显示。@LV98:好的,我修改了查询。我假设您在SaleOrderLine中有一个名为product\u id
的列来标识一种产品。您可能需要检查一下。为什么customername2在同一日期有3条记录?
SELECT *
FROM (
SELECT c.name, c.email, c.phone, sol.description, so.orderDate,
RANK() OVER(PARTITION BY c.id, sol.product_id ORDER BY so.orderDate DESC) rn
FROM SalesOrderLine sol
JOIN SalesOrder so ON sol.salesOrderID = so.id
JOIN Customer c ON so.customerID = c.id
WHERE
orderDate >= '20200501'
AND orderDate <= '20200909'
AND (description LIKE '%Seed Mix%' OR description LIKE '%Sesame Seeds (Natural)%')
) t
WHERE rn = 1
ORDER BY name
AND description IN ('Seed Mix', 'Sesame Seeds (Natural)')