0

さて、私は4つのテーブルを持っています:

credits, playlog, sessionlog, user

creditsuseridには結合する列がありますuser
playlogsessionlogid結合する必要がありsessionlogます。
sessionloguserid結合する必要がありuserます。

したがってsessionlog、ユーザーを取得するために必要な何かに参加すると、行が複数回リストされます。

なぜこうなるのかはわかっているつもりですが、それを防ぐ方法がわかりません。

したがって、プレイヤーがレベルをプレイするたびに、playlog(および everyplaylogに が含まれるsessionlogid) が作成されます。

すべてを結合すると、すべてのプレーヤーがplaylogs の数だけリストに表示されます。

たとえば、特定のプレーヤーのクレジットを見ると、クレジットを使用した頻度に応じて 2 行が表示されます。

しかし、それを と結合するとすぐにsessionlog、これらの 2 つの行が乗算され、それにplaylog属する s の数が表示されsessionlogます。彼が 5 つのレベルをプレイした場合、これらの 2 つの支払い行は 5 倍され、出力は 2 つの支払いで 10 行になります。これにより、レベルごとの支払いを計算するのに大きな問題が発生しています。

playlogすべてのsessionlog制約と追加の制約から最新のもののみを取得するクエリを作成するにはどうすればよいですか?

4

1 に答える 1

0

十分な情報を提供していません。試みは次のとおりです。これにより、ユーザーのリストと、プレイごとに使用された各クレジットの量がわかります。

SELECT      dbo.Users.userID
            , dbo.Users.userName
            , SUM(dbo.Credit.CreditChange) AS NetCreditSpent
            , COUNT(dbo.PlayLog.sessionlogid) AS PlayCount
            , 1.0 * SUM(dbo.Credit.CreditChange) / COUNT(dbo.PlayLog.sessionlogid) AS CreditSpentPerPlay
FROM        dbo.Credit
                RIGHT OUTER JOIN dbo.PlayLog
                INNER JOIN dbo.SessionLog
                    ON dbo.PlayLog.sessionlogid = dbo.SessionLog.sessionlogid
                RIGHT OUTER JOIN dbo.Users
                    ON dbo.SessionLog.userid = dbo.Users.userID 
                    ON dbo.Credit.userID = dbo.Users.userID
GROUP BY    dbo.Users.userID, dbo.Users.userName
于 2013-02-27T17:12:05.380 に答える