我有一个示例表:
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
任何提示如何做到这一点?
如果可能,您也可以建议原始查询..
答案 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
是表格的名称。
希望对某人有所帮助..