2013-03-04 54 views
0

我有如下表:問題選擇特定的行

Id  revenue LogAt  playlog LogAt  creds playlog Id 
9673648 26.02.2013 13:46 26.02.2013 13:37 13 178849374 
9673648 26.02.2013 13:46 26.02.2013 13:38 13 178849795 
9673648 26.02.2013 13:46 26.02.2013 13:39 13 178850630 
9673648 26.02.2013 13:46 26.02.2013 13:41 13 178851326 
9673648 26.02.2013 13:46 26.02.2013 13:33 13 178847056 
9673648 26.02.2013 13:46 26.02.2013 13:34 13 178847796 
9673648 26.02.2013 13:46 26.02.2013 13:36 13 178848715 
9673648 26.02.2013 13:46 26.02.2013 13:32 13 178846609 
9673648 26.02.2013 13:46 26.02.2013 13:32 13 178846250 

它實際上更長,具有被多次列出這樣一個標識的的更「組」,每組作爲唯一的區別playlog logat時間和playlog ID。

現在在給出的例子中,我需要選擇playlog logat在13:41定時的那一行。 另外,對於所有其他組的id,我需要具有「最新」playlog logat行的行。所有這些行的 ,信用應該總結。

我認爲我必須通過時間過濾每一組id的每一行這一行,但我不知道如何。 也許用min()/ max()?

我的rdbms是Microsoft sql server management studio。

表是以下情況造成的加入:

select * 
from credits 
inner join user on credits.userid = user.id 
inner join sessionlog on user.id = sessionlog.userid 
inner join playlog on sessionlog.id = playlog.sessionlogid 

回答

1

我會計算的playlog logat的CTE或子查詢的最大值,然後加入,爲整個表以獲取行數據的其餘部分。

WITH max_cte 
AS 
(
    SELECT Id, MAX([playlog LogAt]) AS MaxLogAt 
    FROM tablename 
    GROUP BY Id 
) 
SELECT max_cte.Id, max_cte.MaxLogAt, 
    tablename.[revenue LogAt], tablename.creds, tablename.[playlog Id] 
FROM max_cte 
INNER JOIN tablename 
    ON max_cte.Id = tablename.Id 
    AND max_cte.MaxLogAt = tablename.[playlog LogAt] 
+0

hm好的,要得到大表,我必須加入4個小表。我在哪裏可以在你的代碼中做到這一點? – msa 2013-03-04 14:36:30

+0

這可能是一個問題,或者它可能不是。要確定地知道,我們需要您爲您的問題添加更多詳細信息。請出示您的表格以及您現在正在做什麼來加入它們。 – 2013-03-04 14:38:43

+0

有一個信用表,我內心加入一個用戶表在credits.userid = user.id.然後我在sessionlog.userid = u.id中加入一個sessionlog表。然後我在playlog.sessionlogid = sessionlog.id內部加入一個playlog-table。在加入一個玩家後,例如在第5級投注一次,然後在同一場次之後玩過其他10個級別後,我的問題將在所有其他10個級別上被標記爲「已經支付」。 – msa 2013-03-04 14:47:01