2012-03-06 46 views
0

我有以下查询:SQL与子查询的问题

SELECT PROGID1 = P.Prog, ENTERDATE1 = MAX(ENTERDATE), 
    BANKID = (select B.BANKID from BANK B 
       WHERE B.ID = PROGID1 and B.ENTERDATE = ENTERDATE1 
      ) 
    FROM PROTOCOL P JOIN BANK B ON P.ID = B.ID 
    group by P.ID 

我需要做的是让一个给定MAX(ENTERDATE)的BANKID但BANKID有重复的记录,我需要找到它基于对在MAX ENTERDATE 是什么。我试图做到以下,但我收到一条消息说无效列名称PROGID1和ENTERDATE1里面:

(select B.BANKID from BANK B 
    WHERE B.ID = PROGID1 and B.ENTERDATE = ENTERDATE1 
      ) 
+1

你能后的实际的错误信息? – Khan 2012-03-06 19:17:21

+0

**什么**数据库系统,以及哪个版本? ** SQL **只是结构化查询语言(Structured Query Language) - 许多数据库系统使用的语言 - SQL是** NOT **数据库产品......类似这样的东西通常是供应商特定的 - 所以我们真的需要知道什么您正在使用的数据库系统.... – 2012-03-06 20:01:23

回答

0

这样的事情?即,使用“协议”查询作为表格。

SELECT b.bank_id 
    FROM bank b 
    , (SELECT id AS progid1, MAX(enterdate) AS enterdate1 
      FROM protocol 
      GROUP BY prog 
     ) p 
WHERE b.id = p.progid1 
    AND b.enterdate = p.enterdate1 

P.S.我认为你使用了“p.prog”,你的意思是p.id。

0

我假设EnterDateBank表中的列,因为这是你表示有多个记录的一个...

SELECT 
    p.Prog, 
    b.EnterDate 
    b.BankID 
FROM 
    Protocol p JOIN 
    Bank b ON b.ID = p.ID AND b.EnterDate = (
     SELECT MAX(b2.EnterDate) AS MaxEnterDate 
     FROM Bank b2 
     WHERE b2.ID = p.ID 
    )