在Firebird 2.1中,我有两个简单的表:
发票:
InvocesID, ClientID, .....
和
客户:
ClientID, GroupID, Name .......
当我选择
SELECT
I.*
FROM
INVOICES I
LEFT JOIN CLIENT C ON C.ClientId=I.ClientID
WHERE
C.GroupID = 15 // for instance
然后我有所有发票。如何在groupid =15
中为每个客户仅获得2张发票?
答案 0 :(得分:1)
最精巧的方法(不是最佳解决方案,但可以在任何Firebird版本中使用,尤其是在您的远古2.1版本中):
SELECT
I.*
FROM
CLIENT C
INNER JOIN INVOICES I ON C.ClientId = I.ClientID AND I.InvocesID >=
(SELECT FIRST 1 SKIP 1 I2.InvocesID FROM INVOICES I2 WHERE I2.ClientId = I.ClientID ORDER BY I2.InvocesID DESC)
WHERE
C.GroupID = 15
我假设您最新的发票编号更大。
另外,由于您对发票感兴趣,因此我将left join
更改为inner join
。如果您还需要退回没有发票的客户,请将其更改为LEFT JOIN
如果您不需要2
,但例如4
的发票只需将SKIP 1
更改为SKIP 3