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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

有沒有辦法在SELECT語句中訪問“上一行”值?

有沒有辦法在SELECT語句中訪問“上一行”值?

交互式愛情 2019-10-17 14:23:08
我需要計(jì)算表的兩行之間的列差。有什么辦法可以直接在SQL中執(zhí)行此操作?我正在使用Microsoft SQL Server 2008。我正在尋找這樣的東西:SELECT value - (previous.value) FROM table假設(shè)“上一個(gè)”變量引用了最近選擇的行。當(dāng)然,通過這樣的選擇,我最終將在具有n行的表中選擇n-1行,這可能不是,實(shí)際上正是我所需要的。有可能嗎?
查看完整描述

3 回答

?
慕的地8271018

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊

SQL沒有內(nèi)置的順序概念,因此您需要按某一列進(jìn)行順序,這樣才有意義。像這樣:


select t1.value - t2.value from table t1, table t2 

where t1.primaryKey = t2.primaryKey - 1

如果您知道如何對(duì)事物進(jìn)行排序,但不知道如何在給定當(dāng)前值的情況下獲得先前的值(例如,您要按字母順序進(jìn)行排序),那么我不知道在標(biāo)準(zhǔn)SQL中執(zhí)行此操作的方法,但是大多數(shù)SQL實(shí)現(xiàn)將具有擴(kuò)展做到這一點(diǎn)。


如果您可以對(duì)行進(jìn)行排序以使每個(gè)行都不同,則這是一種適用于SQL Server的方法:


select  rank() OVER (ORDER BY id) as 'Rank', value into temp1 from t


select t1.value - t2.value from temp1 t1, temp1 t2 

where t1.Rank = t2.Rank - 1


drop table temp1

如果需要打破平局,可以向ORDER BY添加盡可能多的列。


查看完整回答
反對(duì) 回復(fù) 2019-10-17
?
莫回?zé)o

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊

WITH CTE AS (

  SELECT

    rownum = ROW_NUMBER() OVER (ORDER BY columns_to_order_by),

    value

  FROM table

)

SELECT

  curr.value - prev.value

FROM CTE cur

INNER JOIN CTE prev on prev.rownum = cur.rownum - 1


查看完整回答
反對(duì) 回復(fù) 2019-10-17
  • 3 回答
  • 0 關(guān)注
  • 664 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

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