2013-10-25 3 views
0

У меня есть очень Complexe запрос здесь, я стараюсь, чтобы дать вам представление о необходимых таблиц здесь:Очень трудно величайшая п в группе запроса

  • RPG
  • RPGCharacter
  • RPGPost
  • Пользователь

У нас есть X Chars на RPG, x Сообщений на Char. 1 Пользователь может иметь X Chars, но 1 Char только зависит от 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

+0

Редактировать вопрос, решить ее половине сам, добавьте результирующий набор – Kovu

+0

И на этот раз, вы ответили сам, не желая потенциально летальное заболевание ни на кого. – Jodrell

+2

было бы здорово, если бы вы потратили время на подготовку [sqlfiddle] (http://www.sqlfiddle.com/) вместо публикации скриншота SSMS – GolfWolf

ответ

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; 
Смежные вопросы