Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
SQL not getting the results I want
Message
 
To
20/07/2006 16:44:18
Evans Carl
System Answers Consulting, Inc
Big Lake, Minnesota, United States
General information
Forum:
Visual FoxPro
Category:
Databases,Tables, Views, Indexing and SQL syntax
Miscellaneous
Thread ID:
01138126
Message ID:
01138222
Views:
11
We speak about VFP :o)) I am pretty sure Terry use Date type fields not DateTime.

>>Hi Searchers
>>
>>The below SQL is certainly not getting me the results I expect and, worse still gives me 1 spurious result.
>>
>>I've already done a search to multiply the number of journies done on eligible bus services, by a certain factor, to give a "trips" total for each bus operator, route no + (ticket) class, et al, within 2 date ranges.
>>
>>Now I wish to list all the journies that didn't get included in the prev. report because although the (bus) operator had a (ticket) CLASS, the class didn't have an associated MULTIPLIER in the OpClass Table.
>>
>>OpClass Table is as follows:
>>
>>Operator#, Class#, Multiplier, ...
>>
>>And Operator:
>>
>>Operator#, Class#, ...
>>
>>
>>The ETMDATA table holds details of all Electronic Ticket Machine (ETM) transactions over a period.
>>The reason why OpClass needs the 2 keys is that a class is not unique to an operator, and certain class nos mean different things to different operators, but are issued by the ETM manufacturer.
>>
>>Have I got the NOT EXISTS logic wrong or what is it?
>>
>>'ppreciate it.
>>
>>Terry
>>
>>
>>Select	DISTINCT ET.Operator as MLOperator, ET.Class as MLClass, ;
>>		op.Desc as MLOpDesc, rf.ServType as MLServType, ;
>>		SUM( IIF( BETWEEN( ET.date, ldStartCurr, ldEndCurr), ET.Number, 0000000)) AS MLCurrPass, ;
>>		SUM( IIF( BETWEEN( ET.date, ldStartPrev, ldEndPrev), ET.Number, 0000000)) AS MLPrevPass ;
>>  FROM ETMData ET ;
>>	JOIN Operator op ;
>>		On ET.Operator 	== op.Code ;
>>	JOIN RteFam rf ;
>>		On ET.Operator 	== rf.Operator ;
>>		and ET.Route    	== rf.ERoute ;
>>  WHERE  ET.date BETWEEN ldStartCurr and ldEndCurr ;
>>  OR 	ET.date BETWEEN ldStartPrev and ldEndPrev ;
>>  AND 	NOT EXISTS ;
>>  	( Select * from OpClass ;
>>  		WHERE OpClass.Operator == ET.Operator ;
>> 		AND   OpClass.Class    == ET.Class ) ;
>>  ORDER BY	ET.Operator, ET.Class ;
>>  INTO Cursor csrMultless
>>
>>
>
>Terry,
>
>I have sure of issue but I do know that you should probably rethink using BETWEEN when doing SQL Datetime queries comparison
>
>Declare @ETdate datetime
>declare @ldStartCurr datetime
>declare @lEndPrev datetime
>
>set @ETdate = '07/20/2006 10:00:00'
>set @ldStartCurr='07/20/2006 08:00:00'
>set @lEndPrev = '07/20/2006 9:55:00'
>
>if (@ETdate between @ldStartCurr and @lEndPrev)
>begin
> print 'yes'
>end
>else
> print 'no'
>
>ET.Date would not be considered between ldStartCurr and lEndPrev because is may fall in the date range but it does not fall in range when time is evaluated.
>
>This is just a guess...
>
>Carl
Against Stupidity the Gods themselves Contend in Vain - Johann Christoph Friedrich von Schiller
The only thing normal about database guys is their tables.
Previous
Reply
Map
View

Click here to load this message in the networking platform