【发布时间】:2020-04-09 15:48:33
【问题描述】:
我的数据库(SQL SERVER)中有以下视图(表)。
我想从这个表中检索 2 个东西。
- 具有每个产品编号的最新预订日期的对象。 它将返回对象 = {0001, 2, 2019-06-06 10:39:58} 和 {0003, 2, 2019-06-07 12:39:58}。
- 如果所有步骤编号都没有产品编号的预订日期,则返回步骤编号 = 1 的对象。返回对象 = {0002, 1, NULL}。
视图有 7.000.000 行。我必须使用本机查询来做到这一点。
第一个检索到最新预订日期的产品的查询:
SELECT DISTINCT *
FROM TABLE t
WHERE t.BOOKING_DATE = (SELECT max(tbl.BOOKING_DATE) FROM TABLE tbl WHERE t.PRODUCT_NUMBER = tbl.PRODUCT_NUMBER)
第二个查询,检索预订日期为 NULL 且 Step number = 1 的产品;
SELECT DISTINCT *
FROM TABLE t
WHERE (SELECT max(tbl.BOOKING_DATE) FROM TABLE tbl WHERE t.PRODUCT_NUMBER = tbl.PRODUCT_NUMBER) IS NULL AND t.STEP_NUMBER = 1
我尝试使用单个查询,但耗时太长。 现在我使用 2 查询来获取这些信息,但未来我需要改进它。你有替代方案吗?我也不能使用存储过程,SQL SERVER里面的函数。我必须使用来自 Java 的本机查询来做到这一点。
【问题讨论】:
标签: sql sql-server nativequery