2017-02-23 82 views
0

我在左连接左连接中最早的一行挣扎。与左连接奋斗

结果显示2011年的日期,但我知道一个事实,这个特定的行应该返回2008

SELECT TOP 1000 
    f.name as [Franchisee] 
    ,p.paid_date as paid_date 
FROM franchisees_franchisee f 
OUTER APPLY (SELECT TOP 1 * 
       FROM era_project_invoice_payment p 
       WHERE f.franchiseeid = p.franchiseeid 
       and p.deleted = 0 and p.payment_confirmed = 1 
       ORDER BY p.eraprojectinvoicepaymentid ASC) p 
where 
f.deleted = 0 
and f.name LIKE '%VKlinkosch%' 

下面返回正确的,2008年的日期。

SELECT TOP 1000 
    f.name as [Franchisee] 
    ,min(p.paid_date) as paid_date 
from [era_uat_shared].[dbo].[franchisees_franchisee] f 
left join era_project_invoice_payment p 
on f.franchiseeid = p.franchiseeid 
where f.deleted = 0 
and f.name LIKE '%VKlinkosch%' 
GROUP BY f.name 

问题是,我需要的不仅仅是支付表中的付费日期! :(

+0

我会仔细检查你的事实...... 2008年的日期不是那个'franchseeid',或'deleted'不等于'0',或者'payment_confirmed'不等于' 1'。 – SqlZim

+0

也许它没有按照你期望的内部视图排序? – user1327961

+0

Hi Zim,2008指的是付费日期。为了得到这个2008年的日期,我所要做的就是使用min(paid_date)和在一个小小的查询中的f.name字段 – Justin

回答

1
SELECT 
    f.name as [Franchisee] 
    , p.* 
FROM  franchisees_franchisee f 
INNER JOIN 
(
    SELECT 
     ROW_NUMBER() OVER (PARTITION BY franchiseeid ORDER BY paid_date ASC) rn 
     , p.* 
    FROM 
     era_project_invoice_payment p 
    WHERE 
     deleted = 0 
     AND payment_confirmed = 1 
)         p 
ON 
    f.franchiseeid = p.franchiseeid 
    AND f.deleted = 0 
    AND f.name LIKE '%VKlinkosch%' 
    AND p.rn = 1 
+0

这家伙是老板。 :) – Justin