1

SO でこの質問に対する答えを見つけようとしましたが、何も見つかりませんでした。どのリンクも非常に役立ちます。

親テーブルと子テーブルがあり、親テーブルと子テーブルの間に 1 対多の関係があります。子テーブルには約 100 万件のレコードが含まれており、親レコードごとに子テーブルに最初の 10 件のレコードを含むビューを作成したいと考えています。例-

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 つのレコードを日付で並べ替えたビューを作成したいと考えています。

期待される出力

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

ソリューションへのリンクまたはガイドをいただければ幸いです。前もって感謝します!

説明が必要な場合は、コメントを投稿してください。

4

2 に答える 2

1

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 を比較するだけです。datec2で。date直接。

ここでフィドルを参照してください。

于 2013-04-14T07:07:27.600 に答える