mysql - 从子表中为 MySQL View 中的每个父记录获取 N 条记录

标签 mysql view mysql-5.5

我试图在 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/

相关文章:

mysql - postgresql,将无符号数(来自mysql)转换为有符号数(例如,对于smallint,将65535转换为-32768)

mysql - 从 mysql 中的查询创建 View - mysql 不允许创建 View

java - 如何在JSP中迭代Mapped对象的列表项列表?

mysql - 如何让 MySQL 5.5 中的工作查询在 MySQL 5.7 中工作?

php - PHP 5.2.7 支持 utf8mb4

mysql - 如何计算字符串特定位置中特定字符的出现次数 - MYSQL 5.5

python - 如何获取 SQL 查询的数量?

mysql - MySQL 的 SQL 特定编程语言名称是什么?

php - 从 PHP 调用 MySql 函数

ios - 如何在 iOS 的表格 View 中调整文本?