2012-08-26 62 views
0

我有一張表,其中包含產品的付款條款。我想獲得該產品的最新條款。在下面的查詢中,它會返回自我的應用程序投入生產以來的所有條款。我只需要該產品的最新期限。從SQL Server 2008表中選擇最新記錄

SELECT 
    dbo.FinishProduct.id, 
    dbo.PaymentTerm.id, 
    dbo.PaymentTerm.terms, 
    dbo.PaymentTerm.type 
FROM 
    dbo.PaymentTerm 
INNER JOIN 
    dbo.FinishProduct ON (dbo.PaymentTerm.finishProductId = dbo.FinishProduct.id) 
WHERE 
    finishproduct.id = 39 

PaymentTerm表有PK id,它有它的創建和更新的時候,這樣的日期:

id BIGINT NOT NULL IDENTITY, 
created DATETIME, 
lastUpdated DATETIME, 
+0

什麼是您決定支付條款的最新列?你使用的是什麼版本的sql server? – Vikdor

+0

你怎麼知道哪一個是最新的? –

+0

您是否有一個可用於對PaymentTerm進行排序的字段?像日期或時間戳字段created_at列? – Alistair

回答

1

你可以把排序依據子句LASTUPDATED現場查詢並獲得前10名更多最新記錄相應如下

SELECT TOP 10 FP.id, PT.id, PT.terms, PT.type 
    FROM dbo.PaymentTerm PT 
    INNER JOIN dbo.FinishProduct FP ON PT.finishProductId = FP.id 
    WHERE FP.id=39 
    ORDER BY lastUpdated desc 

或者,如果你需要從一開始就得到所有記錄回建樂趣當前日期使用則DateDiff ction like this

SELECT FP.id, PT.id, PT.terms, PT.type 
    FROM dbo.PaymentTerm PT 
    INNER JOIN dbo.FinishProduct FP ON PT.finishProductId = FP.id 
    WHERE FP.id=39 AND DateDiff(DAY,lastUpdated, GETDATE()) <= 1 
+0

我想是這樣的,但它返回錯誤的行 'SELECT TOP 1 FP.id,PT.id,PT.terms,PT.type FROM dbo.PaymentTerm PT INNER JOIN dbo.FinishProduct FP ON PT.finishProductId = FP.id WHERE FP.id = 39 ORDER BY PT.lastUpdated desc' – ZAJ

+0

在這種情況下錯誤行是什麼? –

相關問題