我的数据库是这样的:
CREATE TABLE IF NOT EXISTS patienttestdetail s(
ptdid INTEGER PRIMARY KEY AUTOINCREMENT,
pid INTEGER,
date TEXT,
sugarlevel INTEGER,
FOREIGN KEY(pid) REFERENCES patientdetails(id))
该脚本创建下表。
ptdid pid date sugarlevel
1 1 12/05/2013 125
2 2 12/06/2013 325
3 1 12/41/2012 125
4 3 08/12/2012 135
5 2 04/05/2012 135
6 1 05/12/2012 135
输入我的数据后,我现在想要选择pid = 2的最后一行。
我写了这样的代码:
cursor3=database.rawQuery("SELECT * FROM patienttestdetails WHERE pid="+patientId+" AND ptdid=(+SELECT MAX(ptdid) FROM patienttestdetails+)", null);
在上面的查询中,patientId = 2很好,但会导致运行时异常。
错误:
sqlite.SqliteException:near“&”:语法错误:,同时编译: SELECT * FROM patienttestdetails WHERE pid = 2 AND ptdid =(+ SELECT MAX(ptdid)FROM patienttestdetails +)
答案 0 :(得分:0)
不是&&
其and
以及+
+
正在做什么
cursor3=
database.rawQuery("SELECT *
FROM patienttestdetails
WHERE pid="+patientId+" and ptdid in (
SELECT distinct MAX(ptdid)
FROM patienttestdetails
)", null);
详细了解sqlite here
答案 1 :(得分:0)
您应该坚持使用常规编码风格并使用AND
代替and
,而SQL中也不使用&&
。
显然,您希望获得最新的行,并使用子选择MAX()
进行尝试。
重写您的查询以使用ORDER BY
和LIMIT
:
"SELECT *
FROM patienttestdetails
WHERE pid=" + patientId + "
ORDER BY ptdid DESC
LIMIT 1"
......会更有意义。