Android Question Little help on Sql

marcick

Well-Known Member
Licensed User
Longtime User
Hi,
I need to extract the most recent record of a certain Id, is this way correct or there is a more quick and elegant way using the Max function ?

B4X:
Dim Cursor1 As Cursor
    Dim query As String="SELECT * FROM records WHERE ID = John ORDER BY InsDate DESC LIMIT 1"
       Cursor1 = MySub.SQL_Bls1.ExecQuery(query)
    Cursor1.Position=0   
    Log(Cursor1.GetString("InsDate") & " - " & Cursor1.GetInt("Size"))

Thanks
 

DonManfred

Expert
Licensed User
Longtime User
B4X:
SELECT * FROM table1 ORDER BY id DESC LIMIT 0,1;
 
Upvote 0

marcick

Well-Known Member
Licensed User
Longtime User
This is how I do. I was asking if, instead to use cursor, was possible to retrieve an entire record using the max function.
 
Upvote 0

DonManfred

Expert
Licensed User
Longtime User
I was asking if, instead to use cursor, was possible to retrieve an entire record using the max function.
You can select the hole record and do a subselect to get the max value too

Like this

B4X:
select *,(select max(id) from table) as maxid
from table
where ...
ORDER BY field ASC
LIMIT 0,x

But i DONT know whether it works with sqlite like in mysql too
give it a try
 
Upvote 0

edgar_ortiz

Active Member
Licensed User
Longtime User
Hi,
I need to extract the most recent record of a certain Id, is this way correct or there is a more quick and elegant way using the Max function ?

B4X:
Dim Cursor1 As Cursor
    Dim query As String="SELECT * FROM records WHERE ID = John ORDER BY InsDate DESC LIMIT 1"
       Cursor1 = MySub.SQL_Bls1.ExecQuery(query)
    Cursor1.Position=0  
    Log(Cursor1.GetString("InsDate") & " - " & Cursor1.GetInt("Size"))

Thanks

In fact that's the best way.
 
Upvote 0

sorex

Expert
Licensed User
Longtime User
here's another method...

B4X:
SELECT * FROM records WHERE ID = (select max(ID) from records)

no sorting involved so it might be faster.
 
Upvote 0

marcick

Well-Known Member
Licensed User
Longtime User
Thanks everybody, but anyway we are talking of using then the cursor to extract the columns.
The result of the query is just one record, so I have to set the cursor to 0 and scan the columns.
I was asking myself if, with ExecQuerySingleResult instead of ExecQuery, was possible to extract a whole record and not a single field.
 
Upvote 0

sorex

Expert
Licensed User
Longtime User
why do you need to scan the columns?

* returns all record fields so you can just access them
 
Upvote 0

marcick

Well-Known Member
Licensed User
Longtime User
look to my first post. I need to extract the most recent record of a certain Id, then scan the various column.
I did it with a cursor, how would you do in a single line ?
 
Upvote 0

sorex

Expert
Licensed User
Longtime User
somthing like

B4X:
records=SQL.querySQLite("SELECT * FROM records WHERE ID = (select max(ID) from records)")
records.Position=0
log(records.GetString("ID"))
 
Upvote 0

sorex

Expert
Licensed User
Longtime User
ok, I misinterpret your initial post, your query was already good. I thought you wanted the last ID as single recordset.
 
Upvote 0
Top