2012-08-07 123 views
0

我想檢索具有MAX(col)的表中的行,但如果col中的值具有相同的數據,則MAX(col)返回多行。 我有2個表如下:Android SQLite MAX函數問題

**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阿帕娜
2 USER1 3 XYZ

表2: ROW_ID REF_ID date_in_long數據 1 1 98 DATA1爲阿帕娜 2 1 100 DATA2爲阿帕娜 3 1 100 data3 for aparna 4 2 200 user1的data1 5 2 300 user1的data2 6 3 100 DATA1爲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 

請讓我知道如何問題上面的查詢。

添加以下條件(如由與亞力山大此信息提供溶液),不包括某些行添加上述ROW_ID條件之後

AND 
b.row_id = (Select MAX(c.row_id) from Table2 c where c.ref_id = b.ref_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。

請讓我知道如何解決這個查詢。

謝謝 問候, 阿帕娜

回答

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 

謝謝 問候, 阿帕娜

1

的問題是,「獨特」的關鍵字並不意味着「返回行,每一個值是每隔一行不同」,它的意思是「返回的行在某種程度上與其他行不同「。

因此,即使row_id 2和3具有相同的ref_id,它們也具有不同的row_id和data列 - 因此,它們是唯一的行。

一個選擇是添加一個額外的條件,以便只有特定ref-id的最大row_id受到尊重。

添加的條件看起來像這樣。

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

感謝亞歷山大它的工作,但幾行沒有返回。 – Aparna 2012-08-08 04:54:26

+0

使用上述條件輸出編輯問題。 – Aparna 2012-08-08 06:26:21