3

週に基づいて、複数の行を単一の行に変換したい。次のようになります。誰でも私を助けることができますか?

id      |   Weight   |  Created   |
 1      |    120     | 02-04-2012 |
 2      |    110     | 09-04-2012 |
 1      |    100     | 16-04-2012 |
 1      |    130     | 23-04-2012 |
 2      |    140     | 30-04-2012 |
 3      |    150     | 07-05-2012 |

結果は次のようになります。

id      |   Weight_week1  | Weight_week2  |  weight_week3  | weight_week4  |
 1      |     120         |     100       |      130       |               |
 2      |     110         |     140       |                |               |
 3      |     150         |               |                |               |

前もって感謝します。

4

4 に答える 4

1

これが単一のテーブルの場合

SELECT GROUP_CONCAT(weight) as Weight,
        WEEK(Created) as Week
Group by Week(Created)

これにより、それぞれ週IDとコンマ区切りのwhightを持つ行が得られます

于 2012-05-07T11:31:39.760 に答える
1

次のようにできます。

SELECT
    t.id,
    SUM(CASE WHEN WeekNbr=1 THEN Table1.Weight ELSE 0 END) AS Weight_week1,
    SUM(CASE WHEN WeekNbr=2 THEN Table1.Weight ELSE 0 END) AS Weight_week2,
    SUM(CASE WHEN WeekNbr=3 THEN Table1.Weight ELSE 0 END) AS Weight_week3,
    SUM(CASE WHEN WeekNbr=4 THEN Table1.Weight ELSE 0 END) AS Weight_week4
FROM
    (
    SELECT  
        (
           WEEK(Created, 5) - 
           WEEK(DATE_SUB(Created, INTERVAL DAYOFMONTH(Created) - 1 DAY), 5) + 1 
        )as WeekNbr,
        Table1.id,
        Table1.Weight,
        Table1.Created
    FROM
        Table1
    ) AS t
GROUP BY
    t.id

AVGSUMMAXまたはが必要かどうかはわかりませんがMIN、集計を必要なものに変更できます。

参考資料:

于 2012-05-07T11:16:52.190 に答える
0

そのようにその場でフィールドを作成することはできませんが、それらをグループ化することはできます。

GROUP_CONCAT後で区切ることができる区切り文字で結果を提供するために使用します。

于 2012-05-07T11:05:52.540 に答える
0

これを行うこともできます:

SELECT id, created, weight, (
    SELECT MIN( created ) FROM weights WHERE w.id = weights.id
) AS `min` , round( DATEDIFF( created, (
   SELECT MIN( created )
FROM weights
WHERE w.id = weights.id ) ) /7) AS diff
FROM weights AS w
ORDER BY id, diff

このコードはピボット テーブルを実行しません。必要に応じてデータを変換するには、追加のコードを追加する必要があります。年のせいで WEEK() を使用すると、問題が発生する可能性があります。

于 2012-05-07T12:30:35.177 に答える