1

我有2张桌子如下 -

表一

ID  DATE
1   05/11/12
2   23/11/12
3   29/11/12
4   04/10/12
5   20/11/12

另一个表(IH)包含以下信息 -

ID  RECNO   NOTE
1   1       Open
1   2       Update
1   3       Close
2   1       Open
2   2       Update
2   3       Hold
2   4       Close
3   1       Open
4   1       Open
4   2       Update
5   1       Open

我想输出如下所示的结果,使用每个 ID 的最高值 RecNo 显示 Note 字段。因此,使用输出上方的数据应该是-

ID  DATE        NOTE
2   23/11/12    Close
3   29/11/12    Open

我的代码是-

SELECT I.ID, I.DATE, IH.NOTE FROM
I I, IH IH
JOIN (SELECT MAX([RECNO]) [RECNO] FROM
IH
GROUP BY RECNO) IH2 ON IH2.ID = IH.ID AND
IH2.[RECNO] = IH.[RECNO]
JOIN I I2 ON I2.ID = IH.ID WHERE
(I2.DATE>={TS ‘2012-11-22 00:00:002}) GROUP BY I2.ID

但是,当我执行代码时,我得到-

Invalid Column Name 'RECNO'. Statement(s) could not be prepared.
4

5 回答 5

1

这个怎么样?注意,没试过,我现在在我的 Mac 上。

SELECT I.ID, I.DATE, IH.NOTE
FROM I I
OUTER APPLY 
  (SELECT TOP 1 *
   FROM IH 
   WHERE IH.ID = I.ID
   ORDER BY RECNO DESC) IH    
WHERE I.DATE >= '2012-11-22'
于 2012-11-20T17:20:49.807 回答
0

还有一个

SELECT I.ID, I.DATE
,(Select TOP 1 IH.NOTE FROM IH where IH.ID=i.ID Order by Recno DESC) as Note
from I
WHERE
I.DATE>'20121122'
于 2012-11-20T17:21:38.590 回答
0

您的 SQL 相当,呃,混乱。

假设您使用的是 SQL Server 2005 或更高版本,则可以使用该row_number()函数,如下所示:

SELECT I.ID, I.DATE, IH.NOTE
FROM I join
     (select ih.*, ROW_NUMBER() over (PARTITION by id order by recno desc) as seqnum
      from IH
     ) ih
     on IH2.[RECNO] = IH.[RECNO] and seqnum = 1
WHERE I2.DATE>='2012-11-22 00:00:002'

这是在 IH 表中分配一个序列号,对于每个具有最高记录号的 id 获得值“1”。剩下的只是 SQL。

您的原始查询在语法上根本不正确,但我认为根据描述这是您想要的。

于 2012-11-20T17:18:14.890 回答
0

也许这会有所帮助

SELECT a.ID, a.DATE, b.NOTE FROM a
inner join  b on a.ID = b.ID
where b.recno in (select max(bb.recno)
               from b as bb where bb.id = b.id)

http://sqlfiddle.com/#!3/fd141/2

于 2012-11-20T17:22:41.160 回答
0

如果您不介意不同的标识符,请查看以下解决方案:

select t1.MyID, t1.MyDate, y.Note
from t1
join
(
    select MyID, max(RecNo) as RecNo
    from t2
group by MyID
) x
    on t1.MyID = x.MyID
left join
(
    select *
    from t2
) y
    on t1.MyID = y.MyID
and x.RecNo = y.RecNo
where t1.MyDate >= '2012.11.22'

完整的解决方案在这里:http ://sqlfiddle.com/#!3/4ca09/3

更新:糟糕,忘记在 where 子句中输入日期。更新了 SQL Fiddle 和上面的查询。

于 2012-11-20T19:03:32.830 回答