0

我想从具有 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 data 1 1 98 data1 for aparna 2 1 100 data2 for aparna 3 1 100 data3 for aparna 4 2 200 data1 for user1 5 2 300 data2 for user1 6 3 100 data1 for 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 没有行。

请让我知道如何解决此查询。

谢谢, 问候, 阿帕纳

4

2 回答 2

1

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

因此,即使 row_id 2 和 3 具有相同的 ref_id,它们也有不同的 row_id 和数据列——因此,它们是唯一的行。

一种选择是添加一个额外的条件,以便仅尊重特定 ref-id 的最大 row_id。

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

AND
b.row_id = (Select MAX(c.row_id) from Table2 c where c.ref_id = b.ref_id)
于 2012-08-07T20:05:12.630 回答
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

谢谢, 问候, 阿帕纳

于 2012-08-08T07:37:29.163 回答