Android SQLite MAX功能问题

时间:2012-08-07 19:49:46

标签: android sqlite max

我想从具有MAX(col)的表中检索行,但如果col处的值具有相同的数据,则MAX(col)返回多行。 我有2个表格如下:

**Table1**
row_id INTEGER (Primary key auto incremented), 
name   TEXT

**Table2**
row_id INTEGER (Primary key auto incremented), 
ref_id INTEGER (Foreign key of Table1(row_id)), 
date_in_long TEXT, 
data   TEXT  

以下查询我正在执行以获得具有MAX(date_in_long)的行,期望单个最新输入的行。

SELECT DISTINCT a.name, b.row_id, b.ref_id, b.date_in_long, b.data
FROM Table1 a, Table2 b 
WHERE a.row_id=b.ref_id 
AND b.date_in_long =
(SELECT MAX(c.date_in_long) 
 FROM Table2 c 
 WHERE c.ref_id=a.row_id
)

如果date_in_long对ref_id具有不同的值,则输出结果将是完美的但是它返回多行是值相同。 实施例

表1:     row_id名称     1 aparna
    2 user1     3 XYZ

表2:     row_id ref_id date_in_long数据     适用于aparna的1 1 98 data1     适用于aparna的2 1 100 data2     适用于aparna的3 1 100 data3     user1为4 2 200 data1     用户1的5 2 300 data2     6 3 100数据1用于XYZ

以上查询的结果:

row_id  ref_id  name    date_in_long  data
2       1       aparna  100           data2 for aparna
3       1       aparna  100           data3 for aparna
5       2       user1   300           data2 for user1
6       3       XYZ     100           data1 for XYZ

预期结果应为:

row_id  ref_id  name     date_in_long  data
3       1       aparna   100           data3 for aparna
5       2       user1    300           data3 for user1
6       3       XYZ      100           data1 for XYZ

请告诉我上述查询中的问题。

添加以下条件(由Alexandar提供此解决方案的解决方案)排除某些行

AND
b.row_id = (Select MAX(c.row_id) from Table2 c where c.ref_id = b.ref_id)

添加上述row_id条件后的输出:

row_id  ref_id  name     date_in_long  data
3       1       aparna   100           data3 for aparna
6       3       XYZ      100           data1 for XYZ

USER1没有行。

请告诉我如何解决此问题。

谢谢你, 问候, 阿帕娜

2 个答案:

答案 0 :(得分:1)

问题是“distinct”关键字并不意味着“返回每个值与其他每行不同的行”,这意味着“返回的行与某个行在某种程度上不同”。

因此,尽管row_id 2和3具有相同的ref_id,但它们具有不同的row_id和数据列 - 因此,它们是唯一的行。

一个选项是添加一个额外条件,以便只遵守特定ref-id的max row_id。

添加的条件看起来像这样。

AND
b.row_id = (Select MAX(c.row_id) from Table2 c where c.ref_id = b.ref_id)

答案 1 :(得分:0)

以下查询解决了我的问题。

SELECT a.name, b.row_id, b.ref_id, b.date_in_long, b.data, MAX(date_in_long)
FROM Table1 a INNER JOIN Table2 b 
ON a.row_id=b.ref_id 
GROUP BY a.row_id

谢谢你, 问候, 阿帕娜