webForumDet fria alternativet

Räkna ut differensen direkt i sql

3 svar · 372 visningar · startad av KalsongCesar

KalsongCesarMedlem sedan mars 2001339 inlägg
#1

Kan man räkna ut ett differensen direkt i en sqlfråga?
Har Namn, antal, värde, datum

Nu vill jag jämföra förändringen mellan ett fastställt datum och det senast noterade värdet.

Hittils får jag ut

Namn1 | 100 | 12 | 2005-06-01 -> det fastställda
Namn1 | 100 | 16 | 2005-10-21 -> Det senaste

Dvs skillnaden är ju 4 upp gånger 100 = 400

Hade jag bara fått fram en sån enkel träff så hade det inte varit ngt problem, men nu är det så att det kan finnas fler noterigar samma dag och alla de ska jämföras med det senaste. De är fortfarande unika med det kan se ut så här:

Namn1 | 100 | 12 | 2005-06-01 -> det fastställda
Namn2 | 100 | 13 | 2005-06-01 -> det fastställda
Namn3 | 100 | 14 | 2005-06-01 -> det fastställda
Namn4 | 100 | 15 | 2005-06-01 -> det fastställda

Namn1 | 100 | 16 | 2005-10-21 -> Det senaste
Namn2 | 100 | 16 | 2005-10-21 -> Det senaste
Namn3 | 100 | 16 | 2005-10-21 -> Det senaste
Namn4 | 100 | 16 | 2005-10-21 -> Det senaste

Kör med SQL server
Hoppas ngn kan hjälp mig.

tack på förhand.

BrimbaMedlem sedan dec. 19995 875 inlägg
#2

Kan du förklara lite mer?

Dvs skillnaden är ju 4 upp gånger 100 = 400

Menar du skillnaden i antalet månader?

Du kan även skapa beräkande kolumner, vars värde baseras på en eller flera värden (kan även vara värdet i andra kolumner)

KalsongCesarMedlem sedan mars 2001339 inlägg
#3

De kolumner jag har är
Namn, antal, värde, datum

och jag vill kunna jämföra skillnaden mellan antalet*värdet Datum 1 och Namn1
med antalet*värdet Datum2 och Namn1

Dvs
Namn1 | 100 | 12 | 2005-06-01 -> det fastställda
100*12 = 1200
Namn1 | 100 | 16 | 2005-10-21 -> Det senaste
100*16 = 1600

Så jag vill ha differensen mellan noteringen vid 2005-06-01 mot 2005-10-21

Hoppas det blev tydligare =)

BrimbaMedlem sedan dec. 19995 875 inlägg
#4

Något sånt här du menar?

declare @table table(namn varchar(50), antal int, varde int, datum datetime)

insert into @table values ('namn1', 100, 12, '2005-06-01')
insert into @table values ('namn2', 100, 13, '2005-06-01')
insert into @table values ('namn3', 100, 14, '2005-06-01')
insert into @table values ('namn4', 100, 15, '2005-06-01')

insert into @table values ('namn1', 100, 16, '2005-10-21')
insert into @table values ('namn2', 100, 16, '2005-10-21')
insert into @table values ('namn3', 100, 16, '2005-10-21')
insert into @table values ('namn4', 100, 16, '2005-10-21')

select t1.namn, t1.antal, t1.varde, t1.datum, (select top 1 abs((t1.antal*t1.varde)-(t2.antal*t2.varde)) from @table t2 where t1.namn = t2.namn order by datum desc) utr from @table t1
129 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)