我想从具有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没有行。
请告诉我如何解决此问题。
谢谢你, 问候, 阿帕娜
答案 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
谢谢你, 问候, 阿帕娜