Pavel and David... I just moved some of the table insertions around to change their rowid values and the results are STILL coming out in pos order so... which wasn't what I was getting with my attempts so... Thank you very much indeed for your advice and solution. It is appreciated!
On 1 July 2011 18:41, e-mail mgbg25171 <mgbg25...@blueyonder.co.uk> wrote: > > If you believe that > result of a query differs depending on what order SQLite processes > rows in then you are wrong. > > I am wrong! > > > On 1 July 2011 18:38, e-mail mgbg25171 <mgbg25...@blueyonder.co.uk> wrote: > >> Just to clarify further "pos BETWEEN txt = 1990 and 1991" as its stands >> looks (to my naive eye) like its going to return 1 3 2 and if you ORDER BY >> pos then it's going to return 1 2 3 >> Neither of which is what I want. >> By contrast if you were to "sort" the table FIRST then "pos BETWEEN txt = >> 1990 and 1991" would return 1 2 and this is what I want. >> >> >> >> >> On 1 July 2011 18:24, e-mail mgbg25171 <mgbg25...@blueyonder.co.uk>wrote: >> >>> Here's an example of what I'm trying to do with my query >>> t_x >>> rowid=1,pos=1, txt=1990 >>> rowid=2,pos=3, txt=1992 >>> rowid=3,pos=2, txt=1991 >>> >>> t_y >>> rowid=1,pos=3,txt="sg&a expenses" >>> rowid=2,pos=2,txt="cogs" >>> rowid=3,pos=1,txt='revenue' >>> >>> t_d >>> rowid=1,xpos=1,ypos=1,d=$1 >>> rowid=2,xpos=1,ypos=2,d=$2 >>> rowid=3,xpos=1,ypos=3,d=$3 >>> rowid=4,xpos=3,ypos=1,d=$7 >>> rowid=5,xpos=3,ypos=2,d=$8 >>> rowid=6,xpos=3,ypos=3,d=$9 >>> rowid=7,xpos=2,ypos=1,d=$4 >>> rowid=8,xpos=2,ypos=2,d=$5 >>> rowid=9,xpos=2,ypos=3,d=$6 >>> >>> >>> So in the GUI you'd see t_x as 1990...1991,,,1992 cos that's pos order >>> >>> you'd see t_y as >>> revenue >>> cogs >>> sg&a expenses >>> cos that's pos order >>> >>> and you'd see t_d as >>> 1990 1991 1992 >>> revenue 1 2 3 >>> cogs 4 5 6 >>> sg&a 7 8 9 >>> >>> ie the order in which rows are added i.e. rowid order is not the order >>> of the row's position in the GUI (pos order is the GUI order) >>> >>> The query is to return those data cells encapsulated by the margin text >>> values so... >>> Select all cells BETWEEN 1990 and 1991 and cogs and sg&a. >>> The answer would be 4 5 7 8. >>> >>> Does this help to visualise what I'm trying to do? >>> >>> >>> >>> >>> On 1 July 2011 18:14, Pavel Ivanov <paiva...@gmail.com> wrote: >>> >>>> > Its not a very good example because the two are adjacent and 'x1' and >>>> 'x2' >>>> > sound like they're adjacent too. >>>> >>>> They are not adjacent - 'x1123456' and a lot of other strings starting >>>> with 'x1' are between them. >>>> >>>> > I'm only interested in the results of BETWEEN when you're looking at >>>> x1 and >>>> > x2 from the pos order perspective >>>> >>>> Then David's query is a way to go. >>>> >>>> >>>> Pavel >>>> >>>> >>>> On Fri, Jul 1, 2011 at 1:04 PM, e-mail mgbg25171 >>>> <mgbg25...@blueyonder.co.uk> wrote: >>>> > Pavel, David >>>> > Thanks for bearing with me... >>>> >> "txt BETWEEN 'x1' AND 'x2'" you mean those rows between the row where >>>> txt >>>> > = 'x1' and the row where txt = 'x2' >>>> > Yes that's right. >>>> > Its not a very good example because the two are adjacent and 'x1' and >>>> 'x2' >>>> > sound like they're adjacent too. >>>> > I'm only interested in the results of BETWEEN when you're looking at >>>> x1 and >>>> > x2 from the pos order perspective >>>> > ie doing the BETWEEN query on 'x1' and 'x2' would be useless from the >>>> rowid >>>> > perspective/order. >>>> > I'll write a better description of what I'm trying to do and come >>>> back. >>>> > >>>> > On 1 July 2011 17:48, Pavel Ivanov <paiva...@gmail.com> wrote: >>>> > >>>> >> > I'll certainly try >>>> >> >>SELECT pos FROM t_x WHERE txt BETWEEN 'x1' AND 'x2' ORDER BY pos; >>>> >> > but I need x1 and x2 to be ordered before BETWEEN sees them rather >>>> than >>>> >> the >>>> >> > results just sorted by pos. >>>> >> >>>> >> Maybe I've missed something in this conversation? Please clarify how >>>> >> "results sorted by pos" will be different from "x1 and x2 to be >>>> >> ordered before BETWEEN sees". And tell us more clearly what results >>>> >> you want to see from your query. We certainly see that you want to >>>> get >>>> >> value of pos from all rows where value of txt lies between 'x1' and >>>> >> 'x2'. Now do you want those results to be order by value of pos (add >>>> >> ORDER BY pos), or by value of txt (add ORDER BY txt), or you want >>>> them >>>> >> in a random order (do not add ORDER BY at all)? If you believe that >>>> >> result of a query differs depending on what order SQLite processes >>>> >> rows in then you are wrong. >>>> >> >>>> >> >>>> >> Pavel >>>> >> >>>> >> >>>> >> On Fri, Jul 1, 2011 at 12:34 PM, e-mail mgbg25171 >>>> >> <mgbg25...@blueyonder.co.uk> wrote: >>>> >> > I'll certainly try >>>> >> >>SELECT pos FROM t_x WHERE txt BETWEEN 'x1' AND 'x2' ORDER BY pos; >>>> >> > but I need x1 and x2 to be ordered before BETWEEN sees them rather >>>> than >>>> >> the >>>> >> > results just sorted by pos. >>>> >> > >>>> >> > I've just done this. >>>> >> > const char* sqlSelect = "SELECT d FROM t_d " >>>> >> > "WHERE xpos in " >>>> >> > "(SELECT pos FROM (SELECT * from t_x >>>> ORDER BY >>>> >> > pos) WHERE txt BETWEEN 'x1' AND 'x2')"; >>>> >> > //bit for t_y omitted. >>>> >> > in the hope that (SELECT * from t_x ORDER BY pos) presents it's >>>> results >>>> >> to >>>> >> > SELECT BETWEEN in pos order. >>>> >> > I am concerned about having to specify both xpos and pos and am not >>>> sure >>>> >> how >>>> >> > these two get reconciled. >>>> >> > I am getting results but want to add more data to the tables to see >>>> whats >>>> >> > going on. >>>> >> > >>>> >> > Thank you for your assistance though. >>>> >> > >>>> >> > On 1 July 2011 17:07, Pavel Ivanov <paiva...@gmail.com> wrote: >>>> >> > >>>> >> >> > It strikes me that >>>> >> >> > SELECT pos FROM t_x WHERE txt BETWEEN 'x1' AND 'x2' >>>> >> >> > needs to be operating on the results returned by >>>> >> >> > SELECT * FROM t_x BY ORDER BY pos >>>> >> >> > ie another level of query is required but I'm not sure of how >>>> you >>>> >> insert >>>> >> >> it. >>>> >> >> >>>> >> >> I don't understand what you are talking about here. You should >>>> write >>>> >> >> it like this: >>>> >> >> >>>> >> >> SELECT pos FROM t_x WHERE txt BETWEEN 'x1' AND 'x2' ORDER BY pos; >>>> >> >> >>>> >> >> >>>> >> >> Pavel >>>> >> >> >>>> >> >> >>>> >> >> On Fri, Jul 1, 2011 at 12:02 PM, e-mail mgbg25171 >>>> >> >> <mgbg25...@blueyonder.co.uk> wrote: >>>> >> >> > Thx for your suggestion... >>>> >> >> > Yes "BY ORDER BY pos" has to be in there somewhere. >>>> >> >> > It strikes me that >>>> >> >> > SELECT pos FROM t_x WHERE txt BETWEEN 'x1' AND 'x2' >>>> >> >> > needs to be operating on the results returned by >>>> >> >> > SELECT * FROM t_x BY ORDER BY pos >>>> >> >> > ie another level of query is required but I'm not sure of how >>>> you >>>> >> insert >>>> >> >> it. >>>> >> >> > I'll have a play. >>>> >> >> > >>>> >> >> > >>>> >> >> > >>>> >> >> > On 1 July 2011 16:12, Pavel Ivanov <paiva...@gmail.com> wrote: >>>> >> >> > >>>> >> >> >> > What I want to do is...make sure that when I say BETWEEN I >>>> really >>>> >> mean >>>> >> >> eg >>>> >> >> >> > BETWEEN x1 and x2 when you look at the table as if it's >>>> ordered by >>>> >> pos >>>> >> >> >> and >>>> >> >> >> > not rowid. >>>> >> >> >> >>>> >> >> >> So, can you add "ORDER BY pos" to your queries? >>>> >> >> >> >>>> >> >> >> >>>> >> >> >> Pavel >>>> >> >> >> >>>> >> >> >> >>>> >> >> >> On Fri, Jul 1, 2011 at 11:04 AM, e-mail mgbg25171 >>>> >> >> >> <mgbg25...@blueyonder.co.uk> wrote: >>>> >> >> >> > Thank you all for your responses. >>>> >> >> >> > I had to go out after posting and have just come back. >>>> >> >> >> > My concern is with... >>>> >> >> >> > SELECT pos FROM t_x WHERE txt BETWEEN 'x1' AND 'x2' >>>> >> >> >> > and >>>> >> >> >> > SELECT pos FROM t_y WHERE txt BETWEEN 'y1' AND 'y2'. >>>> >> >> >> > >>>> >> >> >> > t_x and t_y are dimension tables. >>>> >> >> >> > that hold the x and y margins of a spreadsheet. >>>> >> >> >> > The margins will have an implied order shown by pos >>>> >> >> >> > which will differ from the order in which rows are added >>>> >> (represented >>>> >> >> by >>>> >> >> >> > rowid). >>>> >> >> >> > >>>> >> >> >> > What I want to do is...make sure that when I say BETWEEN I >>>> really >>>> >> mean >>>> >> >> eg >>>> >> >> >> > BETWEEN x1 and x2 when you look at the table as if it's >>>> ordered by >>>> >> pos >>>> >> >> >> and >>>> >> >> >> > not rowid. I hope that helps explain why pos exists and is >>>> not >>>> >> rowid >>>> >> >> i.e. >>>> >> >> >> I >>>> >> >> >> > want to be able to "insert" and "delete" records "!in >>>> between" the >>>> >> >> >> existing >>>> >> >> >> > ones or at least make it look like that even if the records >>>> are >>>> >> >> >> physically >>>> >> >> >> > appended to the tables. >>>> >> >> >> > Hope this clarifies things and look forward to your thoughts. >>>> >> >> >> > >>>> >> >> >> > >>>> >> >> >> > On 1 July 2011 15:30, Pavel Ivanov <paiva...@gmail.com> >>>> wrote: >>>> >> >> >> > >>>> >> >> >> >> >> Putting the 'ORDER BY' clause in view won't work? >>>> >> >> >> >> > >>>> >> >> >> >> > It will work just fine, in that the results you see will >>>> appear >>>> >> in >>>> >> >> the >>>> >> >> >> >> ORDER you asked for. >>>> >> >> >> >> >>>> >> >> >> >> I believe that's not always true and is not required by SQL >>>> >> standard. >>>> >> >> >> >> Most probably 'select * from view_name' will return rows in >>>> the >>>> >> order >>>> >> >> >> >> written in the view. But 'select * from view_name where >>>> >> some_column = >>>> >> >> >> >> some_value' can already return rows in completely different >>>> order. >>>> >> >> And >>>> >> >> >> >> 'select * from table_name, view_name where some_condition' >>>> will >>>> >> >> almost >>>> >> >> >> >> certainly ignore any ORDER BY in the view. >>>> >> >> >> >> >>>> >> >> >> >> So ORDER BY in the view doesn't guarantee you anything. >>>> >> >> >> >> >>>> >> >> >> >> >>>> >> >> >> >> Pavel >>>> >> >> >> >> >>>> >> >> >> >> >>>> >> >> >> >> On Fri, Jul 1, 2011 at 10:19 AM, Simon Slavin < >>>> >> slav...@bigfraud.org> >>>> >> >> >> >> wrote: >>>> >> >> >> >> > >>>> >> >> >> >> > On 1 Jul 2011, at 3:07pm, Alessandro Marzocchi wrote: >>>> >> >> >> >> > >>>> >> >> >> >> >> 2011/7/1 Simon Slavin <slav...@bigfraud.org> >>>> >> >> >> >> >> >>>> >> >> >> >> >>> On 1 Jul 2011, at 11:20am, Alessandro Marzocchi wrote: >>>> >> >> >> >> >>> >>>> >> >> >> >> >>>> Isn't it possible to use a view for that? >>>> >> >> >> >> >>> >>>> >> >> >> >> >>> You can use a VIEW if you want, but VIEWs don't sort the >>>> table >>>> >> >> >> either. >>>> >> >> >> >> A >>>> >> >> >> >> >>> VIEW is just a way of saving a SELECT query. When you >>>> consult >>>> >> >> the >>>> >> >> >> VIEW >>>> >> >> >> >> >>> SQLite executes the SELECT. >>>> >> >> >> >> >> >>>> >> >> >> >> >> Putting the 'ORDER BY' clause in view won't work? >>>> >> >> >> >> > >>>> >> >> >> >> > It will work just fine, in that the results you see will >>>> appear >>>> >> in >>>> >> >> the >>>> >> >> >> >> ORDER you asked for. >>>> >> >> >> >> > >>>> >> >> >> >> > However, it has no influence on how data is stored. In >>>> fact no >>>> >> >> table >>>> >> >> >> >> data is stored for a VIEW at all. The thing stored is the >>>> >> parameters >>>> >> >> >> given >>>> >> >> >> >> when you created the VIEW. Every time you refer to a VIEW >>>> in a >>>> >> SQL >>>> >> >> >> >> statement SQL goes back and looks at the VIEW specification >>>> again. >>>> >> >> >> >> > >>>> >> >> >> >> > Simon. >>>> >> >> >> >> > _______________________________________________ >>>> >> >> >> >> > sqlite-users mailing list >>>> >> >> >> >> > sqlite-users@sqlite.org >>>> >> >> >> >> > >>>> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users >>>> >> >> >> >> > >>>> >> >> >> >> _______________________________________________ >>>> >> >> >> >> sqlite-users mailing list >>>> >> >> >> >> sqlite-users@sqlite.org >>>> >> >> >> >> >>>> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users >>>> >> >> >> >> >>>> >> >> >> > _______________________________________________ >>>> >> >> >> > sqlite-users mailing list >>>> >> >> >> > sqlite-users@sqlite.org >>>> >> >> >> > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users >>>> >> >> >> > >>>> >> >> >> _______________________________________________ >>>> >> >> >> sqlite-users mailing list >>>> >> >> >> sqlite-users@sqlite.org >>>> >> >> >> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users >>>> >> >> >> >>>> >> >> > _______________________________________________ >>>> >> >> > sqlite-users mailing list >>>> >> >> > sqlite-users@sqlite.org >>>> >> >> > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users >>>> >> >> > >>>> >> >> _______________________________________________ >>>> >> >> sqlite-users mailing list >>>> >> >> sqlite-users@sqlite.org >>>> >> >> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users >>>> >> >> >>>> >> > _______________________________________________ >>>> >> > sqlite-users mailing list >>>> >> > sqlite-users@sqlite.org >>>> >> > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users >>>> >> > >>>> >> _______________________________________________ >>>> >> sqlite-users mailing list >>>> >> sqlite-users@sqlite.org >>>> >> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users >>>> >> >>>> > _______________________________________________ >>>> > sqlite-users mailing list >>>> > sqlite-users@sqlite.org >>>> > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users >>>> > >>>> _______________________________________________ >>>> sqlite-users mailing list >>>> sqlite-users@sqlite.org >>>> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users >>>> >>> >>> >> > _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users