0

ここには非常に複雑なクエリがあります。ここで必要なテーブルの概要を説明します。

  • RPG
  • RPGキャラクター
  • RPGポスト
  • ユーザー

RPG ごとに X Chars、Char ごとに x Posts があります。1 ユーザーは X 文字を持つことができますが、1 文字は 1 ユーザーにのみ依存します。

私が欲しいのは、これを書いたユーザー名、キャラクター、RPG 自体、および RPG ごとの RPGPosts の数 (合計) に関する情報の中で、RPG ごとの最後の投稿を取得したクエリです。

これは私が今までそれを解決した方法です:

  SELECT        c.RPGID, c.Name, DateTime, r.Name, u.Username, t.count
  FROM            dbo.RPGCharacter c  inner join
   (
        SELECT  CharacterID,  
                MAX(DateTime) MaxDate
        FROM    RPGPost
        GROUP BY CharacterID
    ) MaxDates ON c.RPGCharacterID = MaxDates.CharacterID 
    INNER JOIN  RPGPost p ON   MaxDates.CharacterID = p.CharacterID
                AND MaxDates.MaxDate = p.DateTime
    Inner join RPG r on c.RPGID = r.RPGID
    Inner join [User] u on u.UserID = c.OwnerID
    inner join (Select RPG.RPGID, Count(*) as Count from RPGPost 
                inner join RPGCharacter on RPGPost.CharacterID = RPGCharacter.RPGCharacterID
                inner join RPG on RPG.RPGID = RPGCharacter.RPGID 
                where RPGPost.IsDeleted = 0
                Group by RPG.RPGID) t on r.RPGID = t.RPGID
    Order by DateTime desc

結果: http://abload.de/image.php?img=16iudw.jpg

このクエリは私が望むものすべてを提供しますが、エラーがあります:

1) キャラクターごとの最後の投稿が表示されますが、RPG ごとの最後の投稿が必要です

4

1 に答える 1

1

これは役に立ちますか?CharacterIDこれにより、テーブルごとの最後の投稿が表示さRPGPostれ、その投稿の総数が含まれCharacterIDます。

WITH RankedPost AS (
    SELECT
        P.PostID,
        P.CharacterID,
        P.DateTime
        RANK() OVER (
                PARTITION BY CharacterID, 
                ORDER BY DateTime DESC) Rank,
        RANK() OVER (
                PARTITION BY CharacterID, 
                ORDER BY DateTime ASC) Count
        FROM RPGPost P)
SELECT
    P.DateTime
    P.CharacterID,
    P.Count
FROM RankedPost P
WHERE
    RankedPost.Rank = 0;
于 2013-10-25T12:21:39.760 に答える