我在从给定号码获取最后一个号码时遇到问题(这个给定的号码来自不同的表格)
要求是:
Table A
Person Person_Entry_No
1 100
1 200
1 400
Table B
Person Person_Test
1 300
我需要输出
一个人去测试时的最新参赛作品编号(之前)(person_test)
Person Person_entry_no
1 200
我尝试使用LIMIT 1
只从表1中获取一条记录......但它无效。
答案 0 :(得分:3)
SELECT a.*
FROM TableA a JOIN TableB b ON ( b.Person = a.Person AND a.Person_Entry_No <= b.PersonTest )
AND NOT EXISTS ( SELECT 'b'
FROM TableA a2
WHERE a2.Person = a.Person
AND a2.Person_Entry_No <= b.PersonTest
AND a2.Person_Entry_No > a.Person_Entry_No
)
答案 1 :(得分:2)
limit
。相反,您可以使用fetch first
子句:
SELECT a.*
FROM a
JOIN b ON a.person = b.person AND a.person_entry_no < b.person_test
ORDER BY a.person_entry_no DESC
FETCH FIRST 1 ROW ONLY
答案 2 :(得分:1)
尝试使用MAX的从属子查询:
SELECT b.*,
( SELECT max(Person_Entry_No)
FROM tableA a
WHERE a.Person = b.Person
AND a.Person_Entry_No < b.Person_Test
) As the_most_recen_entry_number
FROM tableB b
答案 3 :(得分:1)
使用MAX()
获取最高价值。
SELECT A.Person, MAX(A.Person_Entry_No)
FROM A
JOIN B ON A.Person = B.Person AND A.Person_Entry_No < B.Person_Test
GROUP BY A.Person
答案 4 :(得分:0)
如果你需要的不只是一个人,你应该选择窗口聚合函数:
select *
from
(
SELECT a.*, b.Person_Test,
row_number() -- rank the entry numbers
over (partition by b.Person
order by a.Person_Entry_No desc) as rn
FROM TableA a
JOIN TableB b ON a.Person = b.Person
where a.person_entry_no < b.Person_Test
) dt
where rn = 1 -- only the first row