"Richard >" <richard.spare@ntlworld.com<nospam> wrote in message
news:Sct2c.24058$gC2.23350@newsfe5-gui.server.ntli.net...[color=blue]
>
> "Erland Sommarskog" <sommar@algonet.se> wrote in message
> news:Xns94A51662B5A8Yazorman@127.0.0.1...[color=green]
> > "Richard" <richard.spare@ntlworld.com (nospam>) writes:[color=darkred]
> > > This goes some way to helping except instead of the MAX(d.starttime),[/color][/color][/color]
i[color=blue][color=green][color=darkred]
> > > need the the nearest record to the current time.
> > >
> > > CREATE TABLE tmpDepartures(endpoint char(12), starttime datetime(8))
> > > INSERT INTO tmpDepartures (endpoint , starttime) VALUES ('1',
> > > '22:00:00')
> > > INSERT INTO tmpDepartures (endpoint , starttime) VALUES ('1',
> > > '22:00:00')
> > > INSERT INTO tmpDepartures (endpoint , starttime) VALUES ('2,
> > > '10:00:00')
> > > INSERT INTO tmpDepartures (endpoint , starttime) VALUES ('2',
> > > '10:00:00')
> > > CREATE TABLE tmpPlaceReference(PlaceID char(12), Name char(50))
> > > INSERT INTO tmpPlaceReference(PlaceID , Name ) VALUES ('1',[/color][/color][/color]
'Here')[color=blue][color=green][color=darkred]
> > > INSERT INTO tmpPlaceReference(PlaceID , Name ) VALUES ('2',[/color][/color][/color]
'There')[color=blue][color=green][color=darkred]
> > >
> > > If the time now is 21:59. I need a query that returns:
> > > Here 22:00:00
> > > There 22:00:00
> > >
> > > If the time now is 22:01
> > >
> > > Here Null
> > > There Null[/color]
> >
> > Your definition of "nearest record" still eludes me. From the narrative,
> > it is not obvious why 22:00:00 should not be returned when current time
> > is 22:01. But the sample output makes it clear what you want.
> >
> > Here is a query that almost gives the desired output. Almost, because
> > it is impossible to return 22:00:00 for There, as this time is not given
> > for There.
> >
> > declare @now datetime
> > select @now = '20040306 21:59'
> >
> > SELECT pr.Name, MIN(convert(char(8), d.starttime, 108))
> > FROM dbo.tmpPlaceReference pr
> > LEFT JOIN dbo.tmpDepartures d
> > ON d.endpoint = pr.PlaceID
> > AND d.starttime > convert(char(8), @now, 108)
> > GROUP BY pr.Name
> > ORDER BY pr.Name
> >
> > The convert stuff is need because there is no time data type in SQL
> > Server. SQL Server accepts '10:00:00' for input to a datetime value,
> > but that actually means '19000101 10:00:00'. Convert takes a couple
> > of format codes for datetime values, 108 is for time only.
> >
> > Note that if @now is 23:59 and there is a departure at midnight, that
> > depature will not be listed.
> >
> > Finally a note about your script: it's a good idea to run it and check
> > before you post. I can tell that you hadn't, because the datetime(8)
> > gave me a syntax error.
> >
> > --
> > Erland Sommarskog, SQL Server MVP,
sommar@algonet.se
> >
> > Books Online for SQL Server SP3 at
> >
http://www.microsoft.com/sql/techinf...2000/books.asp[/color]
>
> Despite my errors with the datetime in CREATETABLE and the fact I got the
> INSERT wrong also..should have been:
>
> INSERT INTO tmpDepartures (endpoint , starttime) VALUES ('1',
> '22:00:00')
> INSERT INTO tmpDepartures (endpoint , starttime) VALUES
> ('2','22:00:00')
> INSERT INTO tmpDepartures (endpoint , starttime) VALUES
> ('1,'10:00:00')
> INSERT INTO tmpDepartures (endpoint , starttime) VALUES
> ('2','10:00:00')
>
> ... you did well to give me the answer (sorry about that).
>
> All seems to work well .. Many thanks for your help.
>
> Regards
> Richard
>
>[/color]
Now I want to add a new variable
table tmpDepartures has a new column called 'StartPoint'. I need to refinne
the resulting rows to a specific 'StartPoint'