在多个字段上不同,但在SQL Server上显示所有字段
我有一个查询,结果如下在多个字段上不同,但在SQL Server上显示所有字段,sql,sql-server,distinct,Sql,Sql Server,Distinct,我有一个查询,结果如下 No date No.PO product type div price 1. 01-10-2012 | AAA1 | X1 | 1 | SBS | 100 2. 09-10-2012 | ABA1 | X1 | 2 | SBS | 150 3. 11-10-201
No date No.PO product type div price
1. 01-10-2012 | AAA1 | X1 | 1 | SBS | 100
2. 09-10-2012 | ABA1 | X1 | 2 | SBS | 150
3. 11-10-2012 | ACC1 | X1 | 1 | SBS | 110
4. 15-10-2012 | ACD1 | X1 | 1 | DBS | 115
5. 20-10-2012 | ADA1 | X1 | 1 | SBS | 112
6. 23-10-2012 | AFA1 | X1 | 2 | SBS | 160
7. 27-10-2012 | AHA1 | X1 | 1 | SBS | 120
No date No.PO product type div price
1. 27-10-2012 | AHA1 | X1 | 1 | SBS | 120
2. 23-10-2012 | AFA1 | X1 | 2 | SBS | 160
3. 15-10-2012 | ACD1 | X1 | 1 | DBS | 115
还有几千张唱片
结果应该是这样的
No date No.PO product type div price
1. 01-10-2012 | AAA1 | X1 | 1 | SBS | 100
2. 09-10-2012 | ABA1 | X1 | 2 | SBS | 150
3. 11-10-2012 | ACC1 | X1 | 1 | SBS | 110
4. 15-10-2012 | ACD1 | X1 | 1 | DBS | 115
5. 20-10-2012 | ADA1 | X1 | 1 | SBS | 112
6. 23-10-2012 | AFA1 | X1 | 2 | SBS | 160
7. 27-10-2012 | AHA1 | X1 | 1 | SBS | 120
No date No.PO product type div price
1. 27-10-2012 | AHA1 | X1 | 1 | SBS | 120
2. 23-10-2012 | AFA1 | X1 | 2 | SBS | 160
3. 15-10-2012 | ACD1 | X1 | 1 | DBS | 115
这是规则
产品类型和部门不同
只有我想显示的最后一个事务表示重复产品、类型和div数据中的最大日期
必须显示所有字段日期、采购订单号、产品、类型、部门和价格
希望我的描述现在清楚了
有人能帮我找到正确的查询吗?请尝试查询并检查结果,仅需猜测
SELECT * FROM(
SELECT
ROW_NUMBER() OVER (Partition by [Type], [Div] ORDER BY [Date] DESC) RowNum,
[Date],
[No.PO],
[Product],
[Type],
[Div],
[Price]
FROM TABLE_Name
)x WHERE RowNum=1
ORDER BY [Date] DESC
我曾尝试使用lag实际模拟lag,因为我使用SQLServer2008来比较前一个值的product、type、div,但查询太复杂slow@Javaboy-请解释您的预期结果。为什么2012年10月27日是结果而2012年10月1日不是结果。如果我的描述不够清楚,很抱歉。我只想要在我的查询中显示的产品类型和div的distict的最后一笔交易你能在这里发布你的查询吗?不能在这里发布我自己的问题,因为我是一个新手,我会在这里发布,如果这不可读,很抱歉-->q1为按产品选择行数,日期描述为行,日期,noPO,产品,类型,div,从表中选择q1.*从q1左侧外部连接q1作为q1.row=qLg.row+1上的qLg,其中q1.productisnullqLg.product'-'或q1.typeisnullqLg.type'-'或q1.DIVISINULLQLG.div'-'按产品排序,日期描述我将尝试此方法。此方法有效,但使用密集秩,我使用行数。但仍然激励着我。谢谢techdo如果我上面的查询用这个方法花了大约20分钟,它会持续大约1分钟。还是太长了。