我试图在 SO 中找到这个问题的答案,但找不到任何答案。任何链接都会有很大帮助。
我有一个父表和一个子表,父表和子表之间存在一对多关系。子表包含大约 100 万条记录,我想为每个父记录在子表中创建一个包含前 10 条记录的 View 。 示例-
Parent_Table - Fields -- ID, Name
ID Name
---- -----
1 A
2 B
3 C
Child_Table - Fields -- ID, ParentID, Date, Data
ID ParentID Date Data
--------------------------
1 1 04/10 A1
2 1 04/11 A2
3 1 04/11 A3
4 1 04/12 A4
5 1 04/12 A5
6 2 04/10 B1
7 2 04/11 B2
8 2 04/12 B3
9 2 04/12 B4
10 2 04/13 B5
11 2 04/13 B6
现在,我想为每个按日期排序的父记录创建一个包含前 4 条记录的 View 。
预期输出
ID ParentID Date Data
--------------------------
1 1 04/10 A1
2 1 04/11 A2
3 1 04/11 A3
4 1 04/12 A4
6 2 04/10 B1
7 2 04/11 B2
8 2 04/12 B3
9 2 04/12 B4
解决方案的任何链接或指南将不胜感激。提前致谢!
如果您需要任何说明,请发表评论。
最佳答案
如果你需要创建一个 View ,你可以使用这样的东西:
CREATE VIEW First_Four AS
SELECT c1.*
FROM
Child_Table c1 LEFT JOIN Child_Table c2
ON c1.ParentID = c2.ParentID
AND (STR_TO_DATE(c1.`date`, '%m/%Y')>STR_TO_DATE(c2.`date`, '%m/%Y')
OR (STR_TO_DATE(c1.`date`, '%m/%Y')=STR_TO_DATE(c2.`date`, '%m/%Y')
AND c1.ID>c2.ID)
)
GROUP BY
c1.ID, c1.ParentID, c1.`Date`, c1.Data
HAVING
COUNT(c2.ID)<4
我将字段数据视为 VARCHAR 列,因此我们需要使用 STR_TO_DATE,如果不是,我们可以将 c1.date
与 c2.date
直接。
请参阅 fiddle here .
关于mysql - 从子表中为 MySQL View 中的每个父记录获取 N 条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15995651/