如何从ORDER_NO字段中的MIN值中选择子查询中的一条记录?
SELECT STATE_CODE,
PROJECT_ID,
MIN(ORDER_NO) AS ORDER_NO,
TEST_SECTION
FROM
(SELECT STATE_CODE,
PROJECT_ID,
ORDER_NO,
RECORD_STATUS,
TEST_SECTION,
SECTION_START,
SECTION_END,
SECTION_CUT_FILL,
DIRECTION_OF_TRAVEL,
CASE
WHEN DIRECTION_OF_TRAVEL=LEAD(DIRECTION_OF_TRAVEL) OVER (ORDER BY STATE_CODE,PROJECT_ID,ORDER_NO)
OR DIRECTION_OF_TRAVEL =LAG(DIRECTION_OF_TRAVEL) OVER (ORDER BY STATE_CODE,PROJECT_ID,ORDER_NO)
THEN 'MAIN DIRECTION'
ELSE 'OPPOSITE DIRECTION'
END AS "DIRECTION"
FROM SPS_PROJECT_STATIONS
WHERE STATE_CODE=24
AND PROJECT_ID LIKE 'A3%%'
AND SUBSTR(TEST_SECTION,3,2)=SUBSTR(PROJECT_ID,1,2)
)
GROUP BY STATE_CODE,
PROJECT_ID;
以下是子查询的结果:
| STATE_CODE | PROJECT_ID | ORDER_NO | RECORD_STATUS | TEST_SECTION | SECTION_START | SECTION_END | SECTION_CUT_FILL | DIRECTION_OF_TRAVEL | DIRECTION | |:----------:|------------|----------|---------------|--------------|---------------|-------------|------------------|---------------------|----------------| | 24 | A300 | 2 | E | 24A310 | 320 | 472 | 3 | 1 | MAIN DIRECTION | | 24 | A300 | 3 | E | 24A330 | 533 | 686 | 3 | 1 | MAIN DIRECTION | | 24 | A300 | 4 | E | 24A320 | 747 | 899 | 2 | 1 | MAIN DIRECTION | | 24 | A300 | 5 | E | 24A340 | 960 | 1113 | 3 | 1 | MAIN DIRECTION | | 24 | A300 | 6 | E | 24A350 | 1173 | 1325 | 1 | 1 | MAIN DIRECTION | | 24 | A300 | 7 | E | 24A311 | 1386 | 1539 | 2 | 1 | MAIN DIRECTION | | 24 | A300 | 8 | E | 24A331 | 1584 | 1736 | 1 | 1 | MAIN DIRECTION |
答案 0 :(得分:0)
您似乎需要此查询中的一行,其中ORDER_NO是您的集合的MIN ORDER_NO。
SELECT TOP 1 STATE_CODE,
PROJECT_ID,
ORDER_NO,
TEST_SECTION
FROM (...)
ORDER BY ORDER_NO;
Top 1只会获得一行,并且通过ORDER_NO排序,您确保您的单行返回集是包含MIN ORDER_NO
的行。答案 1 :(得分:0)
这似乎有效...除非有人有更好的主意
SELECT *
FROM
(SELECT STATE_CODE,
PROJECT_ID,
ORDER_NO,
RECORD_STATUS,
TEST_SECTION,
SECTION_START,
SECTION_END,
SECTION_CUT_FILL,
DIRECTION_OF_TRAVEL,
DIRECTION,
ROW_NUMBER() OVER (PARTITION BY STATE_CODE,PROJECT_ID ORDER BY STATE_CODE,PROJECT_ID,ORDER_NO) AS "ROW NUMBER"
FROM
(SELECT STATE_CODE,
PROJECT_ID,
ORDER_NO,
RECORD_STATUS,
TEST_SECTION,
SECTION_START,
SECTION_END,
SECTION_CUT_FILL,
DIRECTION_OF_TRAVEL,
CASE
WHEN DIRECTION_OF_TRAVEL=LEAD(DIRECTION_OF_TRAVEL) OVER (ORDER BY STATE_CODE,PROJECT_ID,ORDER_NO)
OR DIRECTION_OF_TRAVEL =LAG(DIRECTION_OF_TRAVEL) OVER (ORDER BY STATE_CODE,PROJECT_ID,ORDER_NO)
THEN 'MAIN DIRECTION'
ELSE 'OPPOSITE DIRECTION'
END AS "DIRECTION"
FROM SPS_PROJECT_STATIONS
WHERE STATE_CODE=24
AND PROJECT_ID LIKE 'A3%%'
AND SUBSTR(TEST_SECTION,3,2)=SUBSTR(PROJECT_ID,1,2)
ORDER BY STATE_CODE,
PROJECT_ID,
ORDER_NO
)
WHERE DIRECTION='MAIN DIRECTION'
)
WHERE "ROW NUMBER"=1;