1
SELECT part_number, 
    price, 
    (Select max(sent_to_t) AS 'T' From [CIMSDB].[dbo].[price] where sent_to_t < '06/04/2013' Group by part_number)

 FROM [CDB].[dbo].[part]PAB Inner Join [CDB].[dbo].[price] PR
    ON PA.part_id = PR.part_id
 Order By part_number

我想要做的是获取 6/4 之前最近的 send_to_t 日期的零件清单及其价格。我目前正在收到 -“错误消息

服务器:消息 164,级别 15,状态 1,第 1 行每个 GROUP BY 表达式必须包含至少一个不是外部引用的列。”

4

1 回答 1

2

您根本不需要 MAX(这与上面的主查询无关,因此会出现错误)。即使相关,它也会为您提供send_to_t某个日期之前的最新值,而不是该日期的价格。它只会给出未关联日期的最新价格。

你问(我的大胆)

获取6/4之前最近的send_to_t 日期的零件清单及其价格

这为您提供了之前零件的最新价格06/04/2013
基本上是“每组前 1 名”,但带有日期过滤器)

    SELECT
        part_number, 
        price,
        sent_to_t
    FROM
        (
        SELECT
            part_number, 
            price,
            sent_to_t,
            ROW_NUMBER() OVER (PARTITION BY part_number ORDER BY sent_to_t DESC) AS rn
        FROM
            [CDB].[dbo].[part] PAB
            Inner Join
            [CDB].[dbo].[price] PR ON PAB.part_id = PR.part_id
        WHERE
            sent_to_t < '06/04/2013'
        ) X
WHERE
    X.rn = 1
ORDER BY
    part_number;

注意06/04/2013是模棱两可的:是 4 月 6 日还是 6 月 4 日?你应该使用yyyymmdd安全

于 2013-06-27T13:33:02.140 回答