我的問題與sql select from multiple records only the most recent非常相關,雖然它根本不起作用。在同一查詢中選擇多個記錄中的最近記錄
我有一個view
,獲取成員名稱和他們當前的排名數字。 我也有一張表,它發現所有等級名稱都大於上述等級號碼。
按原樣,新視圖顯示當前成員以及排名標題表中的排名標題>=
。
這意味着輸出顯示每個標題的排名後,而我只想顯示第一個(最早)。
我已經嘗試了變形例從上面的鏈接,像這樣:
SELECT dbo.vwGetMemberRank.siteMemberId AS ID
, dbo.vwGetMemberRank.memberNickname AS Nick
, dbo.vwGetMemberRank.siteMemberRankLevel AS currentPoints
, dbo.tblSiteMemberRankTitle.siteMemberRankLevel AS neededPoints
, dbo.tblSiteMemberRankTitle.siteMemberRankTitle AS rankTitle
FROM dbo.vwGetMemberRank
INNER JOIN dbo.tblSiteMemberRankTitle
ON dbo.vwGetMemberRank.siteMemberRankLevel >= dbo.tblSiteMemberRankTitle.siteMemberRankLevel
WHERE dbo.vwGetMemberRank.siteMemberId IN
(
SELECT MIN(siteMemberId) AS ID
FROM dbo.vwGetMemberRank AS vwGetMemberRank_1
GROUP BY siteMemberRankLevel
)
這仍然顯示每隔標題。
編輯
vwGetMemberRank
SELECT dbo.tblSiteMemberRank.siteMemberId
, dbo.tblSiteMemberRank.siteMemberRankLevel
, dbo.tblSiteMemberDetail.memberNickname
FROM dbo.tblSiteMemberDetail
INNER JOIN dbo.tblSiteMemberRank ON dbo.tblSiteMemberDetail.siteMemberId = dbo.tblSiteMemberRank.siteMemberId
tblSiteMemberRankTitle
CREATE TABLE [dbo].[tblSiteMemberRankTitle](
[id] [int] IDENTITY(1,1) NOT NULL,
[siteMemberRankTitle] [varchar](30) NOT NULL,
[siteMemberRankDescription] [varchar](80) NULL,
[siteMemberRankLevel] [int] NULL,
[thumbnailLocation] [nvarchar](100) NULL,
CONSTRAINT [PK__tblSiteM__3213E83F1B0907CE] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
你檢查出LAG()和鉛( )? http://msdn.microsoft.com/en-us/library/hh213125.aspx – 2013-04-30 12:47:00
從來沒有聽說過。現在將閱讀它。 - 你可以在這個過渡期間提供一個例子嗎? – TheGeekZn 2013-04-30 12:47:26
基本上你創建一個窗口/偏移量來說「我想要這個函數的結果,對於離我很遠的一行,當我命令所有這樣的行時」。這是非常有效的,因爲您不必自行加入任何東西;你只需重用你在FROM子句中的集合。 – 2013-04-30 12:49:20