第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

獲取每組的前1行

獲取每組的前1行

桃花長相依 2019-06-05 11:06:51
獲取每組的前1行我有一張桌子,我想得到每一組的最新條目。這張桌子:DocumentStatusLogs表|ID| DocumentID | Status | DateCreated || 2| 1          | S1     | 7/29/2011   || 3| 1          | S2     | 7/30/2011   || 6| 1          | S1     | 8/02/2011   || 1| 2          | S1     | 7/28/2011   || 4| 2          | S2     | 7/30/2011   || 5| 2          | S3     | 8/01/2011   || 6| 3          | S1     | 8/02/2011   |這張表將按DocumentID并按DateCreated按降序排列。每人DocumentID我想知道最新的情況。我喜歡的輸出:| DocumentID | Status | DateCreated || 1          | S1     | 8/02/2011   || 2          | S3     | 8/01/2011   || 3          | S1     | 8/02/2011   |是否有任何聚合函數(shù)只從每個組中獲得頂部?見偽碼GetOnlyTheTop下文:SELECT  DocumentID,  GetOnlyTheTop(Status),  GetOnlyTheTop(DateCreated)FROM DocumentStatusLogsGROUP BY DocumentIDORDER BY DateCreated DESC如果不存在這樣的函數(shù),有什么方法可以實現(xiàn)我想要的輸出?或者首先,這可能是由于數(shù)據(jù)庫不規(guī)范造成的嗎?我在想,因為我要找的只是一排,是不是status是否也位于父表中?有關(guān)更多信息,請參見父表:電流Documents表| DocumentID | Title  | Content  | DateCreated || 1          | TitleA | ...      | ...         || 2          | TitleB | ...      | ...         || 3          | TitleC | ...      | ...         |父表是否應該是這樣的,這樣我就可以輕松地訪問它的狀態(tài)了嗎?| DocumentID | Title  | Content  | DateCreated | CurrentStatus || 1          | TitleA | ...      | ...         | s1            || 2          | TitleB | ...      | ...         | s3            || 3          | TitleC | ...      | ...         | s1            |更新我剛剛學會了如何使用“應用”,這使它更容易解決這些問題。
查看完整描述

3 回答

?
慕碼人2483693

TA貢獻1860條經(jīng)驗 獲得超9個贊

;WITH cte AS(
   SELECT *,
         ROW_NUMBER() OVER (PARTITION BY DocumentID ORDER BY DateCreated DESC) AS rn   FROM DocumentStatusLogs)SELECT *FROM cteWHERE rn = 1

如果您期望每天有兩個條目,那么這將任意選擇一個。若要獲得這兩個條目一天,請使用密集_秩代替

至于正?;c否,取決于你是否想:

  • 在2個地方保持狀態(tài)
  • 保存狀態(tài)歷史
  • ...

就目前情況而言,你保留了身份歷史。如果您也想在父表中獲得最新的狀態(tài)(這是去角色化),那么您需要一個觸發(fā)器來維護父表中的“狀態(tài)”?;騽h除此狀態(tài)歷史記錄表。


查看完整回答
反對 回復 2019-06-05
?
慕標琳琳

TA貢獻1830條經(jīng)驗 獲得超9個贊

我剛學會了如何使用cross apply..下面是如何在這個場景中使用它:

 select d.DocumentID, ds.Status, ds.DateCreated 
 from Documents as d 
 cross apply 
     (select top 1 Status, DateCreated      from DocumentStatusLogs 
      where DocumentID = d.DocumentId      order by DateCreated desc) as ds


查看完整回答
反對 回復 2019-06-05
?
手掌心

TA貢獻1942條經(jīng)驗 獲得超3個贊

我在這里對各種建議做了一些時間安排,結(jié)果實際上取決于所涉及的表的大小,但最一致的解決方案是使用交叉應用-這些測試是針對SQLServer2008-R2運行的,使用的是一個記錄為6500條的表,以及另一個記錄為1.37億條的表(相同的模式)。正在查詢的列是表中主鍵的一部分,表的寬度非常小(約30字節(jié))。SQLServer根據(jù)實際執(zhí)行計劃報告時間。


Query                                  Time for 6500 (ms)    Time for 137M(ms)


CROSS APPLY                                    17.9                17.9

SELECT WHERE col = (SELECT MAX(COL)…)           6.6               854.4

DENSE_RANK() OVER PARTITION                     6.6               907.1

我認為真正令人驚訝的是,無論涉及的行數(shù)如何,交叉應用的時間是多么一致。



查看完整回答
反對 回復 2019-06-05
  • 3 回答
  • 0 關(guān)注
  • 579 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號