sql - 选择 MIN(日期)和 MAX(日期)以及 MAX(日期)运费值

标签 sql sql-server northwind

我需要 MIN(Orderdate) 和 MAX(Orderdate) 以及 MAX(Orderdate) Freight 值。

我尝试使用 CTE,但正在努力消除 CustomerID 的重复行

USE Northwind
GO

WITH CTE AS (
SELECT a.customerID,
    MAX(b.OrderDate) AS LastOrder,
    MIN(b.OrderDate) AS FirstOrder

    FROM Orders AS b
INNER JOIN Customers AS a 
ON b.CustomerID = a.CustomerID
GROUP BY a.CustomerID
)

SELECT CTE.customerID, CTE.FirstOrder, d.OrderDate as LastOrder, d.Freight
FROM CTE 
INNER JOIN Orders as d
On CTE.CustomerID = d.CustomerID 
GROUP BY CTE.CustomerID, CTE.FirstOrder, d.Freight, d.OrderDate
HAVING d.OrderDate = MAX(d.OrderDate)

我正在尝试获取应显示 89 条记录的结果。

  CustomerID   FirstOrder   LastOrder    Freight
|  ALFKI     | 1997-08-25 | 1998-04-09 |  1.21   |
|  ANATR     | 1996-09-18 | 1998-03-04 |  39.92  |
|  ANTON     | 1996-11-27 | 1998-01-28 |  58.43  |
|  AROUT     | 1996-11-15 | 1998-04-10 |  33.80  |
|  BERGS     | 1996-08-12 | 1998-03-04 |  151.52 |

最佳答案

只是为了保持简单并符合问题。子查询 CTE 已具有 customerID 和 LastOrder(最大订单日期)。将 CTE 中的 LastOrder 列连接到 Order 表 OrderDate 将给出预期结果。

and d.OrderDate = CTE.LastOrder 

完整查询:

WITH CTE AS (
SELECT a.customerID,
    MAX(b.OrderDate) AS LastOrder,
    MIN(b.OrderDate) AS FirstOrder

    FROM Orders AS b
INNER JOIN Customers AS a 
ON b.CustomerID = a.CustomerID
GROUP BY a.CustomerID
)
SELECT CTE.customerID, CTE.FirstOrder, d.OrderDate as LastOrder, d.Freight
FROM CTE 
INNER JOIN Orders as d
On CTE.CustomerID = d.CustomerID 
and d.OrderDate = CTE.LastOrder 

关于sql - 选择 MIN(日期)和 MAX(日期)以及 MAX(日期)运费值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55600491/

相关文章:

mysql - 查找从未一起订购的两种产品的所有组合

mysql - 排序和分页

sql - 为列 A Oracle 中的每个值在列 b 中查找重复项

java - Hiibernate : java. lang.ClassCastException : java. lang.String 无法转换为 java.lang.Integer

mysql - SQL : Select statement order by

c# - 如何使用c# ASP.net返回sql查询结果消息

sql - 需要有关 Northwind 数据访问层教程的更正 SQL 语法的帮助

json - 如何将复杂的 JSON 字符串放入 SQL Server 列中

sql-server - t-sql 计算文本列中的唯一单词

sql - 查询返回笛卡尔积 (Northwind)