SQL从另一个表中提取最新信息和信息

时间:2015-05-13 17:41:57

标签: sql-server sql-server-2008

我有一个记录表,记录表中的更改。我可以从第一个表中提取数据,但是当我尝试加入另一个表来添加一些列信息时,它会停止显示信息。

PartNumber | PartDesc | value | date
1          | test     | 1     | 3/4/2015

我想在位置表

中加入Aisle标签
PartNumber| AisleTag    | AisleTagTwo
1         | A1          | N/A

这是我到目前为止的sql语句

Select t1.PartNumber, t1.PartDesc , t1.NewValue ,  t1.Date,t2.AisleTag,t2.AisleTagTwo
from InvRecord t1
JOIN PartAisleListTbl t2 ON t1.PartNumber = t2.PartNumber
where Date = (select max(Date) from InvRecord where t1.PartNumber = InvRecord.PartNumber)
order by t1.PartNumber

它是空白的,我原来的sql语句不包括t2中的任何内容。我不确定在获取数据方面采用什么方法任何帮助都非常感谢谢谢!

这应该是最终结果

PartNumber | PartDesc | value | date     | AisleTag    | AisleTagTwo
1          | test     | 1     | 3/4/2015 | A1          | N/A

3 个答案:

答案 0 :(得分:1)

不确定为什么你的工作不起作用...... t1和t2的任何机会都是?

如果它有所作为,那么使用内联视图而不是相关查询奇迹就可以了。

Select t1.PartNumber, t1.PartDesc , t1.NewValue ,  t1.Date,t2.AisleTag,t2.AisleTagTwo
from InvRecord t1
JOIN PartAisleListTbl t2 
  ON t1.PartNumber = t2.PartNumber
JOIN (select max(Date) mdate, PartNumber from InvRecord GROUP BY PartNumber) t3
  on t3.partNumber= T1.PartNumber
 and T3.mdate = T1.Date 
order by t1.PartNumber

答案 1 :(得分:1)

您是否根本没有返回任何记录,或只返回AisleTagAisleTagTwo为空的记录?

你的句子"它是空白的,我的原始sql语句不包括t2中的任何内容。"听起来好像你正在为t2字段获取带空值的记录。

如果您是,那么您可能在t2中有一条记录,其中包含这些字段的空值。

出于疑难解答的目的,请尝试运行不带WHERE子句的查询:

Select t1.PartNumber, t1.PartDesc , t1.NewValue , t1.Date,t2.AisleTag,t2.AisleTagTwo
from InvRecord t1
JOIN PartAisleListTbl t2 ON t1.PartNumber = t2.PartNumber
order by t1.PartNumber

如果您确实获得了记录,那么您的问题就在于WHERE子句。如果您不这样做,则问题在于PartNumber中的InvRecord字段与PartAisleListTbl不匹配。

答案 2 :(得分:1)

拉出表A中每个PartNumber的最新行(基于Date)并附加表B中的数据(在PartNumber上加入):

SELECT *
FROM (
    SELECT A.PartNumber
         , A.PartDesc
         , A.NewValue
         , A.Date
         , B.AisleTag
         , B.AisleTagTwo
         , DateSeq = ROW_NUMBER() OVER(PARTITION BY A.PartNumber ORDER BY A.Date DESC)
    FROM InvRecord A
    LEFT JOIN PartAisleListTbl B
        ON A.PartNumber = B.PartNumber
) A
WHERE A.DateSeq = 1
ORDER BY A.PartNumber