获取每个产品编号的最大日期(最后销售日期)列?

时间:2018-08-19 08:16:53

标签: sql sql-server

我有以下返回结果的SQL查询

result img

private void exportDB() { try { File sd = Environment.getExternalStorageDirectory(); File data = Environment.getDataDirectory(); if (sd.canWrite()) { String currentDBPath = "//data//" + "com.budgettrackpro.android.budgettrackpro" + "//databases//" + "budgettrackpro.db"; String backupDBPath = "BudgetTrackPro"; File currentDB = new File(data, currentDBPath); File backupDB = new File(sd, backupDBPath); FileChannel src = new FileInputStream(currentDB).getChannel(); FileChannel dst = new FileOutputStream(backupDB).getChannel(); dst.transferFrom(src, 0, src.size()); src.close(); dst.close(); Toast.makeText(getActivity(), "Backup Successful!", Toast.LENGTH_SHORT).show(); } } catch (Exception e) { Toast.makeText(getActivity(), "Backup Failed!", Toast.LENGTH_SHORT) .show(); } } itemno的销售。我也希望针对每个商品都没有no of total quantity列。表itemdescripton的{​​{1}}列。

SQL查询:

ITEMDESC#

我想要结果中的invitems列。针对每个 select INITEMS.ITEMNO,(COUNT(INITEMS.ITEMNO)*COUNT(INITEMS.QTY)) 'Item Sale',INITEMS.ITEMDESC#1 from InvItems INITEMS INNER JOIN InvHdr HDR ON INITEMS.INVNO=HDR.INVNO WHERE INITEMS.TYPE='3' GROUP BY INITEMS.ITEMNO,INITEMS.ITEMDESC#1 的{​​{1}}表中的max date (last date item sale)

2 个答案:

答案 0 :(得分:2)

如前面的注释中所述,您的查询无法正常工作,因为您为同一ITEMDESC使用了不同的ITEMNO

这“给”您想要的结果

select INITEMS.ITEMNO,
       MAX(INITEMS.ITEMDESC#1) AS 'ITEMDESC',
       (COUNT(INITEMS.ITEMNO)*COUNT(INITEMS.QTY)) 'Item Sale'
FROM   InvItems INITEMS
INNER JOIN InvHdr HDR ON INITEMS.INVNO = HDR.INVNO
WHERE INITEMS.TYPE = '3'
GROUP BY INITEMS.ITEMNO

但是您必须检查为什么数据中存在诸如此类的内容。您可以列出这种情况下的ITEMNO

SELECT ITEMNO
FROM   InvItems 
GROUP BY ITEMNO
HAVING MAX(ITEMDESC#1) <> MIN(ITEMDESC#1)

答案 1 :(得分:1)

假设您正在使用高于2005的SQL Server版本(如今这是一个非常安全的假设),则可以将over子句与聚合函数一起使用,从而可能消除对{{1 }}子句(这可能是因为group by将为group by子句中存在的每个值(或一组值)返回不同的结果-因此,您可能还需要使用group by

distinct