获取两个连接表的最早日期,供应商,数量

时间:2016-06-13 19:09:59

标签: sql-server-2008 tsql

我有一个用于将数据导入Crystal Report的查询;它会折叠数据,以便为每个唯一的STOCK_ID获取一条记录,而Crystal中的逻辑和格式依赖于此。

现在我需要在报告上再添加三列。隔离,查询看起来像这样:

*SELECT LINE.STOCK_ID ,LINE.QTY ,LINE.ORD_NUMB ,LINE.LINE_NUMB ,ORDER.DATE ,ORDER.VENDOR ,ORDER.STATUS ,PRODUCT.COUNT
FROM tbl_LINE LINE
JOIN tbl_ORDER ORDER ON LINE.ORD_NUMB = ORDER.ORD_NUMB
JOIN tbl_PRODUCT PRODUCT ON LINE.STOCK_ID = PRODUCT.STOCK_ID
WHERE ORDER.STATUS < 600 AND PRODUCT.COUNT > 1
ORDER BY LINE.STOCK_ID ,ORDER.DATE*

这会引入多个LINE.QTY,ORDER.DATE,ORDER.VENDOR和STOCK_ID,但我需要折叠才能获得最新的ORDER.DATE以及其他两个相关列。

我没有使用连接表执行此操作的解决方案。

任何见解。

1 个答案:

答案 0 :(得分:0)

这样的事情怎么样?

SELECT LINE.STOCK_ID ,LINE.QTY ,LINE.ORD_NUMB ,LINE.LINE_NUMB ,ORDER.DATE ,ORDER.VENDOR ,ORDER.STATUS ,PRODUCT.COUNT
FROM tbl_LINE LINE
JOIN tbl_ORDER ORDER ON LINE.ORD_NUMB = ORDER.ORD_NUMB
JOIN tbl_PRODUCT PRODUCT ON LINE.STOCK_ID = PRODUCT.STOCK_ID
JOIN 
(
    SELECT PRODUCT.STOCK_ID, max(ORDER.DATE) as MaxOrderDate
    FROM tbl_LINE LINE
    JOIN tbl_ORDER ORDER ON LINE.ORD_NUMB = ORDER.ORD_NUMB
    JOIN tbl_PRODUCT PRODUCT ON LINE.STOCK_ID = PRODUCT.STOCK_ID
    WHERE ORDER.STATUS < 600 AND PRODUCT.COUNT > 1
    GROUP BY PRODUCT.STOCK_ID
) x on LINE.STOCK_ID = x.STOCK_ID and ORDER.DATE = x.MaxOrderDate
WHERE ORDER.STATUS < 600 AND PRODUCT.COUNT > 1
ORDER BY LINE.STOCK_ID ,ORDER.DATE