使用LAST和DISTINCT的SQLite查询

时间:2014-01-13 09:12:25

标签: sqlite distinct

我有一个示例表:

ID  |  ArticleID  |  Price  |  SupplierID  |  dateAdded
1      1             100          1             2014-08-01
2      1             110          2             2014-08-01
3      2             105          1             2014-08-01
4      2             106          1             2014-08-01
5      2             101          2             2014-08-01
6      3             100          1             2014-08-01
7      1             107          2             2014-09-01
8      3             343          2             2014-09-01
9      3             232          2             2014-09-01
10     1             45           1             2014-09-01

我想在此表上使用.query,并为每个SupplierID选择为每个DISTINCT ArticleID输入的最后值,结果是:

ID  |  ArticleID  |  Price  |  SupplierID
10     1             45          1
9      3             232         2
6      3             100         1
7      1             107         2
4      2             106         1
5      2             101         2

我想获得为每个SupplierID输入的最后一个ArticleID的价格。

我应该进入什么

public Cursor query (boolean distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)

到目前为止,我想出了这个:

String[] columns = new String[]{DatabaseOpenHelper.KEY_ID, DatabaseOpenHelper.KEY_CENA, DatabaseOpenHelper.KEY_IZDELEK_ID};
Cursor crs = database.query(true,"prices", columns, selection, selectionArgs, null, null, null, null);

但现在我被困了:S

任何提示如何做到这一点?

如果可能,您也可以建议原始查询..

2 个答案:

答案 0 :(得分:2)

原始查询将是这样的:

SELECT ID, ArticleID, Price, SupplierID FROM your_table WHERE ID IN (SELECT max(ID) from your_table GROUP BY ArticleID, SupplierID);

我假设ID是自动增量的,并且更新的条目具有更高的ID。如果不是这种情况,请更改HAVING子句以在DATE列上操作。

答案 1 :(得分:0)

在我的朋友的帮助下,我找到了我想要的SQL查询,不确定优化:

select tab.* from cene tab inner join (
    select izdelek_id, trgovina_id, Max(enter_date) as maxDate
    from cene group by izdelek_id, trgovina_id) art
on (art.izdelek_id = tab.izdelek_id) and (art.trgovina_id = tab.trgovina_id) and (art.maxDate = tab.enter_date)

izdelek_id = ArticleID
trgovina_id =供应商ID
cene是表格的名称。

希望对某人有所帮助..