如何 select 仅来自 table 的第二个最大日期
How to select only the second max date from a table
我有一个 table 存储交货日期和订单号的地方。
在这里我可以得到最大交货日期的订单。
SELECT DISTINCT D.ORDER_NO
FROM DELIVERY D
WHERE D.CUSTOMER_NO =112 AND D.DELIVERY_DATE = (SELECT MAX(D1.DELIVERY_DATE) FROM DELIVERY D1
WHERE D1.CUSTOMER_NO = 112 );
此处单个客户可能有多个订单。
现在我想要的是只获得第二个最大日期。
通过使用上述查询,我能够通过将 =
更改为 <
并在子查询中添加 ORDER BY
来获取最大交货日期以外的数据列表。
但是它是一个完整的列表,但我只想要第二个最大日期。
有人请告诉我如何才能只获得第二个最大日期。
注意:我试过使用 ROWNUM<=1
但我输入的日期不对
改变D.DELIVERY_DATE =
到D.DELIVERY_DATE <
SELECT DISTINCT D.ORDER_NO
FROM DELIVERY D
WHERE D.CUSTOMER_NO =112 AND D.DELIVERY_DATE = (SELECT MAX(D1.DELIVERY_DATE) FROM DELIVERY D1
WHERE D1.CUSTOMER_NO = 112 );
或类似下面的内容
SELECT MAX(DELIVERY_DATE)
FROM TABLE
WHERE DELIVERY_DATE< ( SELECT MAX(DELIVERY_DATE)
FROM TABLE)
SELECT * FROM(
SELECT DISTINCT D.ORDER_NO, ROW_NUMBER()OVER(order by D.DELIVERY_DATE desc) RowNo
FROM DELIVERY D
WHERE D.CUSTOMER_NO =112
) t where t.RowNo = 2
假设您使用的是 Oracle:
SELECT *
FROM
(
SELECT t.*, rownum rnum
FROM
(
SELECT DISTINCT D.ORDER_NO
FROM DELIVERY D
WHERE D.CUSTOMER_NO = 112
ORDER BY D.DELIVERY_DATE DESC
) t
WHERE rownum <= 2
)
WHERE rnum >= 2
SELECT TOP 1 D.ORDER_NO
FROM DELIVERY D WHERE D.CUSTOMER_NO =112
AND D.DELIVERY_DATE = (SELECT MAX(D1.DELIVERY_DATE) FROM DELIVERY D1 WHERE D1.CUSTOMER_NO = 112 );
ORDER BY DELIVERY_DATE DESC
您可以试试这个查询:
SELECT DISTINCT ORDER_NO FROM DELIVERY WHERE CUSTOMER_NO=112 AND DELIVERY_DATE =
(SELECT MAX(DELIVERY_DATE) FROM DELIVERY WHERE CUSTOMER_NO=112 AND
DELIVERY_DATE<(SELECT MAX(DELIVERY_DATE) FROM DELIVERY AND CUSTOMER_NO=112));
子查询将 return 第二个最大交货日期,这将给出 order_no 第二个最大交货日期。
SELECT D.ORDER_NO
FROM
(
SELECT DISTINCT D.ORDER_NO,D.DELIVERY_DATE,ROW_NUMBER()OVER(order by D.DELIVERY_DATE desc) RowNo
FROM DELIVERY D
WHERE D.CUSTOMER_NO =1128158
ORDER BY D.DELIVERY_DATE DESC)
t WHERE t.RowNo = 2;
Select 第二个最大日期从 table
SELECT MAX(date) FROM tbl_date WHERE date NOT IN (SELECT MAX(date) FROM tbl_date )
OR
SELECT DISTINCT date FROM tbl_date ORDER BY date DESC LIMIT 1,1;
OR
SELECT MAX(date) FROM ( SELECT date FROM tbl_date MINUS SELECT MAX(date) FROM tbl_date)
我有一个 table 存储交货日期和订单号的地方。
在这里我可以得到最大交货日期的订单。
SELECT DISTINCT D.ORDER_NO
FROM DELIVERY D
WHERE D.CUSTOMER_NO =112 AND D.DELIVERY_DATE = (SELECT MAX(D1.DELIVERY_DATE) FROM DELIVERY D1
WHERE D1.CUSTOMER_NO = 112 );
此处单个客户可能有多个订单。
现在我想要的是只获得第二个最大日期。
通过使用上述查询,我能够通过将 =
更改为 <
并在子查询中添加 ORDER BY
来获取最大交货日期以外的数据列表。
但是它是一个完整的列表,但我只想要第二个最大日期。
有人请告诉我如何才能只获得第二个最大日期。
注意:我试过使用 ROWNUM<=1
但我输入的日期不对
改变D.DELIVERY_DATE =
到D.DELIVERY_DATE <
SELECT DISTINCT D.ORDER_NO
FROM DELIVERY D
WHERE D.CUSTOMER_NO =112 AND D.DELIVERY_DATE = (SELECT MAX(D1.DELIVERY_DATE) FROM DELIVERY D1
WHERE D1.CUSTOMER_NO = 112 );
或类似下面的内容
SELECT MAX(DELIVERY_DATE)
FROM TABLE
WHERE DELIVERY_DATE< ( SELECT MAX(DELIVERY_DATE)
FROM TABLE)
SELECT * FROM(
SELECT DISTINCT D.ORDER_NO, ROW_NUMBER()OVER(order by D.DELIVERY_DATE desc) RowNo
FROM DELIVERY D
WHERE D.CUSTOMER_NO =112
) t where t.RowNo = 2
假设您使用的是 Oracle:
SELECT *
FROM
(
SELECT t.*, rownum rnum
FROM
(
SELECT DISTINCT D.ORDER_NO
FROM DELIVERY D
WHERE D.CUSTOMER_NO = 112
ORDER BY D.DELIVERY_DATE DESC
) t
WHERE rownum <= 2
)
WHERE rnum >= 2
SELECT TOP 1 D.ORDER_NO
FROM DELIVERY D WHERE D.CUSTOMER_NO =112
AND D.DELIVERY_DATE = (SELECT MAX(D1.DELIVERY_DATE) FROM DELIVERY D1 WHERE D1.CUSTOMER_NO = 112 );
ORDER BY DELIVERY_DATE DESC
您可以试试这个查询:
SELECT DISTINCT ORDER_NO FROM DELIVERY WHERE CUSTOMER_NO=112 AND DELIVERY_DATE =
(SELECT MAX(DELIVERY_DATE) FROM DELIVERY WHERE CUSTOMER_NO=112 AND
DELIVERY_DATE<(SELECT MAX(DELIVERY_DATE) FROM DELIVERY AND CUSTOMER_NO=112));
子查询将 return 第二个最大交货日期,这将给出 order_no 第二个最大交货日期。
SELECT D.ORDER_NO
FROM
(
SELECT DISTINCT D.ORDER_NO,D.DELIVERY_DATE,ROW_NUMBER()OVER(order by D.DELIVERY_DATE desc) RowNo
FROM DELIVERY D
WHERE D.CUSTOMER_NO =1128158
ORDER BY D.DELIVERY_DATE DESC)
t WHERE t.RowNo = 2;
Select 第二个最大日期从 table
SELECT MAX(date) FROM tbl_date WHERE date NOT IN (SELECT MAX(date) FROM tbl_date )
OR
SELECT DISTINCT date FROM tbl_date ORDER BY date DESC LIMIT 1,1;
OR
SELECT MAX(date) FROM ( SELECT date FROM tbl_date MINUS SELECT MAX(date) FROM tbl_date)