Hi Terry,

MIPro SQL is definitely a subset of the full SQL syntax, but it has it's strong points too.

Normal SQL doesn't really allow for "intermidiate result sets", but MIPro's selection/queryNN model does just that (I know of the normal select-into but it's not quite the same). It allows one to split one's query into sequential, making a query on a query. E.g.:

select * from baseTable where someCondition Into Q1
select * from Q1 where SomeOtherCondition into Q2
etc.

As per your case, you're grouping on "stop" too, which oughtn't be necessary as far as I understand your need. And the field values you choose to select, that are not present in the group by clause, will yield an arbitrary result from any of the grouped records (but the statement's legal, contrary to "normal" SQL).

Maybe you need to try and make a grouped query as the 1st run, and a filtering query (on the previous query) as the 2nd run.

I would also have thought that the "Into ... NoSelect" ought to be the last sub clause, but I may be mistaken.

Best regards / Med venlig hilsen
Lars Nielsen
GisPro



Terry McDonnell wrote:

Uffe

Thanks for the reply.

I have to max( asc( rte_let)) otherwise I get a data type mismatch error.  i.e. 
MAX() only works on numeric fields.

I've resigned myself to the fact that I need more steps, but this isn't helped 
by the fact that SQL doesn't work on intermediate cursors - only on base tables.

So it looks like back to boring do loops! :-(

Terry

-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Uffe Kousgaard
Sent: 19 December 2005 17:46
To: Terry McDonnell
Subject: Re: [MI-L] How to get the recs with the "highest" letter code.

Terry,

I wouldn't be surprised if MI can't handle your SQL below and I don't really 
know, what to expect from the result.

You have something like select max(.....) "maxgen" group by maxgen. In normal 
SQL it would go like this:

select field1, max(field2)
group by field1

You also select fields, which are not part of the group by. That is allowed in 
MI, but not in many other SQL's.

I would recode the SQL, probably in more steps to be sure to get what you are 
after.

Kind regards

Uffe Kousgaard
www.routeware.dk


----- Original Message -----
From: "Terry McDonnell" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>; "[EMAIL PROTECTED]" <[email protected]>
Sent: Monday, December 19, 2005 5:46 PM
Subject: RE: [MI-L] How to get the recs with the "highest" letter code.


Hi Lars

Thanks for the further reply.

Erm, there's nothing normal about the cut-down version of SQL in MB.  I've
been used to (and so spoilt by) the much richer version in VFP and MB's
doesn't even come close.  As such I've rarely used "group by" but I had a
go, as below:
Select Rte_No, MAX( ASC( Rte_Let)) "maxGen", Directn, Stop, SeqNo, Time,
RunOrder
 from RZStop
 where Zone = 1 into csrZonesServices NoSelect
 group by rte_no, maxGen, stop
 order by Rte_No, Stop, maxGen, Directn, SeqNo

It's nearly right - gets all the data in the exact order I want, but I get
ALL gen's of those routes that have more than one.
Can't figure this one out.

Cheers

Terry

________________________________

From: Lars V. Nielsen (GisPro) [mailto:[EMAIL PROTECTED]
Sent: 16 December 2005 20:01
To: Terry McDonnell
Subject: Re: [MI-L] How to get the recs with the "highest" letter code.


Hi Terry,

You need to group your query to get the highest number for each route.
Normal SQL stuff ;-)
Best regards / Med venlig hilsen
Lars Nielsen
GisPro



Terry McDonnell wrote:

Hi Ian, Lars and Søren

Thank you very much for your replies, all rather similar.

Well this gets me started only maybe I didn't make myself clear.  I said:

"Can't figure out how to dynamically select the latest gen for each of a
bunch of disparate routes that I might want in the list. (e.g. list all the
routes that stop at this stop, or pass through this polygonal zone)"
Max(Asc(gen)) WILL return the highest gen (although I then need to;
 Browse CHR$( Max(Asc(gen))) "Generation"
To get it back to a meaningful column name and in the "A" to "Z" form.

Trouble is, it only returns ONE record, the one with the highest Gen.  I
DID simplify the task for purposes of this request in that I'm actually
interested in the link table between the Zones and Routes: a m-to-m reln.
With the arrival times of each route in the zone: RZStop
I need to return all the details of:
 all the RZStop recs for the highest Gen of all the routes
 all times when each route visits the zone ( there are several
repetitions of each route during the day)
How do I do that?

E.g.  Assuming I want all routes at zone 20:

Zone Rte_No Gen Direction Time
20 X100 A O 0800
20 X100 A O 0810
20 X100 A O 0815
20 X100 A O 0822
... Other zones for this same route and gen
20 X100 B O 0800
20 X100 B O 0810
20 X100 B O 0815
20 X100 B O 0818
20 X100 B O 0822
... Other zones for this same route and gen
20 A200 A O 0800
20 A200 A O 0810
20 A200 A O 0820
... Other zones for this same route and gen
20 A200 B O 0822
20 A200 B O 0825
20 A200 B O 0830

Should return

Zone Rte_No Gen Direction Time
20 X100 B O 0800
20 X100 B O 0810
20 X100 B O 0815
20 X100 B O 0818
20 X100 B O 0822
----------------------------------------
20 A200 B O 0822
20 A200 B O 0825
20 A200 B O 0830

Essentially like a cut-down timetable on a bus shelter, only with just the
one stop/zone.
I've got the feeling that I'm going to have to do this in several passes,
but one SQL pass takes ages in itself.
Another proble is that I need to sort the list on 6 or 7 fields, but MB
only allows 5, but I can fix that by pre-sorting the table into a cursor.
Unless anyone has any bright ideas! ?

Thanks again

Terry

-----Original Message-----

Terry

Try Max(Asc(gen)).

Asc will return the ASCII code of the letter.

Cheers Ian

-----Original Message-----

Hi Foilks

I have a table of bus routes, where each route has a route number and a
generation key.  e.g. the original route has a gen of "A".  When the route
is revised, the next gen is "B" and becomes the current operating route, and
so on.  The previous generations stay on file though.
Now when we want to get route info, via SQL, into, say, a browse, we're
only interested in the latest gen.  But not ALL routes will be at the same
gen;  some may be still gen A while others can be anything up to "Z".  I
tried the MAX( gen) function in the SQL but MI wouldn't have that.  So I'm
stuffed.  Can't figure out how to dynamically select the latest gen for each
of a bunch of disparate routes that I might want in the list. (e.g. list all
the routes that stop at this stop, or pass through this polygonal zone)
Any ideas/solutions?

'ppreciate it

Terry McDonnell


_______________________________________________
MapInfo-L mailing list
[email protected]
http://www.directionsmag.com/mailman/listinfo/mapinfo-l




_______________________________________________
MapInfo-L mailing list
[email protected]
http://www.directionsmag.com/mailman/listinfo/mapinfo-l

_______________________________________________
MapInfo-L mailing list
[email protected]
http://www.directionsmag.com/mailman/listinfo/mapinfo-l

Reply via email to