开发者社区> 问答> 正文

通过MAX()进行SQL搜索

select max(DELIVERY_TIMESTAMP) from DOCUMENTS;将返回最新文档的交付时间。如何返回最新文档的其他列?例如,我要DOC_NAME获取最近发送的文档?

我不确定如何形成该WHERE子句。

问题来源于stack overflow

展开
收起
保持可爱mmm 2019-11-18 17:59:47 452 0
1 条回答
写回答
取消 提交回答
  • 您有几种选择

    SELECT DOC_NAME FROM DOCUMENTS WHERE DELIVERY_TIMESTAMP IN ( SELECT MAX(DELIVERY_TIMESTAMP) FROM DOCUMENTS ) 或加入

    SELECT DOC_NAME FROM DOCUMENTS INNER JOIN ( SELECT MAX(DELIVERY_TIMESTAMP) AS MAX_DELIVERY_TIMESTAMP FROM DOCUMENTS ) AS M ON M.MAX_DELIVERY_TIMESTAMP = DOCUMENTS.DELIVERY_TIMESTAMP 如果时间戳中有重复项,或者您在“最大”条件中需要多个列(因为MAX()所有行仅在一个列上),它将变得更加复杂。

    在这里,该JOIN选项是唯一可用的选项,因为这样的构造不可用(例如具有相同时间戳的多个订单):

    SELECT DOC_NAME FROM DOCUMENTS WHERE (DELIVERY_TIMESTAMP, ORDERID) IN ( SELECT TOP 1 DELIVERY_TIMESTAMP, ORDERID FROM DOCUMENTS ORDER BY DELIVERY_TIMESTAMP DESC, ORDERID DESC ) 实际上,您需要执行以下操作:

    SELECT DOC_NAME FROM DOCUMENTS INNER JOIN ( SELECT TOP 1 DELIVERY_TIMESTAMP, ORDERID FROM DOCUMENTS ORDER BY DELIVERY_TIMESTAMP DESC, ORDERID DESC ) AS M ON M.DELIVERY_TIMESTAMP = DOCUMENTS.DELIVERY_TIMESTAMP AND M.ORDERID = DOCUMENTS.ORDERID

    2019-11-18 17:59:55
    赞同 展开评论 打赏
问答分类:
SQL
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载