问题描述
我正在编写一个查询,其中应提供ID,名称和城市,以及最后访问的五个页面。 ID,名称和城市来自table1,最后访问的五个页面来自table2。
我现在拥有的是:
SELECT
id AS `ID`,name AS `Company Name`,city AS `City`,(
SELECT table2.pagePath
FROM table2
WHERE table2.visitdate =
(
SELECT MAX(table2.visitdate)
FROM table2
)
)
FROM table1
LEFT JOIN table2
ON table1.id = table2.id
WHERE zip_code = "1111 AB"
GROUP BY table1.id;
您可能会注意到,它不起作用...
我正在尝试使用子查询来获取最近访问的页面,这是五个页面中的第一个。我得到一个响应,对于所有返回的行,这是相同的页面路径。
谁能将我推向正确的方向?
干杯!
解决方法
我认为您想要这样的东西:
select t.*,t2.*
from table1 t1 left join
(select t2.*,row_number() over (partition by t2.id order by t2.visitdate desc) as seqnum
from table2 t2
) t2
on t2.id = t1.idand t2.seqnum <= 5;
请注意,您的查询似乎具有问题中未描述的逻辑。我专注于您所询问的查询,而不是似乎与该问题没有太大关系的查询。