| Author |
Topic |
|
Tryan
Starting Member
7 Posts |
Posted - 2009-01-19 : 06:05:27
|
| i have 2 table names: BUvitaal and BUgebeurtenisBUvitaalcolumnsvitaalID(int)(primarykey)invoer(int)uitvoer(int)gewicht(int)etc..BUgebeurteniscolumnsbewonerID(int)vitaalID(int)datum(DateTime)etc..Now what i need is every first column value from BUvitaal based on last datum(DateTime) from BUgebeurtenisi have a select statement here ,but it returns every value from a specific column name based on last datum(DateTime).and i only need 1 row per column value and it must be te last recent one based on the datum(DateTime) of course.if a function like FIRST were available in sqlserver 2005 i would have solved this problem easely.my statement:select v.vitaalID,v.tekst,v.stoelgang,v.invoer,v.uitvoer,v.gewicht,v.hogebloed,v.lagebloed,v.pols,v.temperatuur,v.bloedsuiker,v.tijd,v.lengte,v.zichtbaarfrom BUvitaal vINNER JOIN BUgebeurtenis g ON v.vitaalID = g.vitaalIDwhere g.datum <= ANY(SELECT Max(gg.datum) from BUgebeurtenis gg where gg.datum <= Getdate() and vitaalID <> 0 and gg.bewonerID = 5)order by datum descresults are:[url]http://www.box.net/shared/tmxfacnfg2[/url]the green rows are the ones i need |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2009-01-19 : 06:33:01
|
There is a "first" function in SQL Server 2005. It's called ROW_NUMBER() E 12°55'05.63"N 56°04'39.26" |
 |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2009-01-19 : 06:36:13
|
You can also use CROSS APPLY.Visakh will show you shortly. E 12°55'05.63"N 56°04'39.26" |
 |
|
|
Tryan
Starting Member
7 Posts |
Posted - 2009-01-19 : 06:42:11
|
| Great! can't wait :) |
 |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2009-01-19 : 07:51:55
|
Meanwhile, try thisDECLARE @Stage TABLE ( rowID INT IDENTITY(1, 1) PRIMARY KEY CLUSTERED, grp tinyint, vitaalID, tekst, stoelgang, invoer, uitvoer, gewicht, hogebloed, lagebloed, pols, temperatuur, bloedsuiker, tijd, lengte, zichtbaar )INSERT @Stage ( vitaalID, tekst, stoelgang, invoer, uitvoer, gewicht, hogebloed, lagebloed, pols, temperatuur, bloedsuiker, tijd, lengte, zichtbaar )select v.vitaalID, v.tekst, v.stoelgang, v.invoer, v.uitvoer, v.gewicht, v.hogebloed, v.lagebloed, v.pols, v.temperatuur, v.bloedsuiker, v.tijd, v.lengte, v.zichtbaarfrom BUvitaal as vINNER JOIN BUgebeurtenis as g ON v.vitaalID = g.vitaalIDwhere g.datum <= (SELECT Max(gg.datum) from BUgebeurtenis as gg where gg.datum <= Getdate() and vitaalID <> 0 and gg.bewonerID = 5)order by datum descDECLARE @left TINYINT, @right TININTSELECT @left = 0, @right = 0UPDATE grp = CASE WHEN @left = 0 AND invoer > 0 AND uitvoer > 0 THEN 1 WHEN @right = 0 AND hogebloed > 0 AND lagebloed > 0 THEN 1 ELSE 0 END, @left = case when invoer > 0 AND uitvoer > 0 then 1 else 0 end, @right = case when hogebloed > 0 AND lagebloed > 0 then 1 else 0 endSELECT vitaalID, tekst, stoelgang, invoer, uitvoer, gewicht, hogebloed, lagebloed, pols, temperatuur, bloedsuiker, tijd, lengte, zichtbaarFROM @StageWHERE grp = 0 E 12°55'05.63"N 56°04'39.26" |
 |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2009-01-19 : 09:14:11
|
using ROW_NUMBER()SELECT vitaalID,tekst,stoelgang,invoer,uitvoer,gewicht,hogebloed,lagebloed,pols,temperatuur,bloedsuiker,tijd,lengte,zichtbaarFROM(SELECT ROW_NUMBER() OVER (PARTITION BY vitaalID ORDER BY datum DESC) AS Seq,v.vitaalID,v.tekst,v.stoelgang,v.invoer,v.uitvoer,v.gewicht,v.hogebloed,v.lagebloed,v.pols,v.temperatuur,v.bloedsuiker,v.tijd,v.lengte,v.zichtbaarfrom BUvitaal vINNER JOIN BUgebeurtenis g ON v.vitaalID = g.vitaalID)tWHERE t.Seq=1 |
 |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2009-01-19 : 09:20:51
|
using CROSS APPLYSELECT v.vitaalID,v.tekst,v.stoelgang,v.invoer,v.uitvoer,v.gewicht,v.hogebloed,v.lagebloed,v.pols,v.temperatuur,v.bloedsuiker,v.tijd,v.lengte,v.zichtbaarFROM BUvitaal vCROSS APPLY (SELECT TOP 1 * FROM BUgebeurtenis WHERE vitaalID = v.vitaalID ORDER BY datum DESC) g |
 |
|
|
Tryan
Starting Member
7 Posts |
Posted - 2009-01-20 : 00:55:49
|
| i thank you for the quick reply ,but sql server doesn't recoqnize Row_number() for some reason.i have sql server 2005 standard edition and the function isn't available can anyone explain that to me?and "using row_number()" using isn't working.USE instead is recoqnized. |
 |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2009-01-20 : 02:17:16
|
You must set your compatibility level to 90 or higher for the current database. E 12°55'05.63"N 56°04'39.26" |
 |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2009-01-20 : 02:26:19
|
use EXEC sp_dbcmptlevel 'your db name',90 for that |
 |
|
|
Tryan
Starting Member
7 Posts |
Posted - 2009-01-22 : 12:59:23
|
| ok i set dbcmptlevel to 90,but still it doesn't recoqnize ROW_NUMBER() feature.and the query won't execute :( |
 |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2009-01-22 : 13:05:37
|
the query is this:- SELECT vitaalID,tekst,stoelgang,invoer,uitvoer,gewicht,hogebloed,lagebloed,pols,temperatuur,bloedsuiker,tijd,lengte,zichtbaarFROM(SELECT ROW_NUMBER() OVER (PARTITION BY vitaalID ORDER BY datum DESC) AS Seq,v.vitaalID,v.tekst,v.stoelgang,v.invoer,v.uitvoer,v.gewicht,v.hogebloed,v.lagebloed,v.pols,v.temperatuur,v.bloedsuiker,v.tijd,v.lengte,v.zichtbaarfrom BUvitaal vINNER JOIN BUgebeurtenis g ON v.vitaalID = g.vitaalID)tWHERE t.Seq=1 or this:-SELECT v.vitaalID,v.tekst,v.stoelgang,v.invoer,v.uitvoer,v.gewicht,v.hogebloed,v.lagebloed,v.pols,v.temperatuur,v.bloedsuiker,v.tijd,v.lengte,v.zichtbaarFROM BUvitaal vCROSS APPLY (SELECT TOP 1 * FROM BUgebeurtenis WHERE vitaalID = v.vitaalID ORDER BY datum DESC) g the others were just headings i put |
 |
|
|
Tryan
Starting Member
7 Posts |
Posted - 2009-01-27 : 04:34:20
|
| excel: http://www.box.net/shared/8kk0d6m3isare the results from the first query in the previous reply. (and the second one didn't work as it should be too)what i need are only the green one's marked ,should be 6 or 7 rows.please reply. |
 |
|
|
|
|
|