2009-10-28 88 views
0

商業世界1256987每月10 2009-10-28SQL查詢...多個最大值選擇。幫助需要

商業世界1256987每月10 2009-09-23

商業世界1256987每月10 2009-08-18

Linux的4 U 456734每月25 2009-12-24

Linux的4 U 456734月25 2009-11-11

Linux的4 U 456734月25 2009-10-28


我得到這樣的結果與查詢:

SELECT DISTINCT ljm.journelname,ljm. subscription_id, 
    ljm.frequency,ljm.publisher, ljm.price, ljd.receipt_date 
FROM lib_journals_master ljm, 
    lib_subscriptionhistory 
    lsh,lib_journal_details ljd 
WHERE ljd.journal_id=ljm.id 
ORDER BY ljm.publisher 

我需要的是在每個日記的最後日期?

我嘗試此查詢:

SELECT DISTINCT ljm.journelname, ljm.subscription_id, 
    ljm.frequency, ljm.publisher, ljm.price,ljd.receipt_date 
FROM lib_journals_master ljm, 
    lib_subscriptionhistory lsh, 
    lib_journal_details ljd 
WHERE ljd.journal_id=ljm.id 
AND ljd.receipt_date = (
    SELECT max(ljd.receipt_date) 
    from lib_journal_details ljd) 

但它給我從整列的最大值。我需要的結果將有兩個日期(每個雜誌的最大值),但是這個查詢只給我一個?

+1

請格式化問題,尤其是代碼,以便它是可讀的 – Mark 2009-10-28 11:52:39

+0

對不起...我試過,但作爲一個新手,無法格式化不夠好... :( – dev646 2009-11-03 05:52:20

回答

0

如果您需要Max from date,則應使用Group By。 應該是這個樣子:

SELECT 
    ljm.journelname 
    , ljm.subscription_id 
    , ljm.frequency 
    , ljm.publisher 
    , ljm.price 
    , **MAX(ljd.receipt_date)** 
FROM 
    lib_journals_master ljm 
    , lib_subscriptionhistory lsh 
    , lib_journal_details ljd 
WHERE 
    ljd.journal_id=ljm.id 
GROUP BY 
    ljm.journelname 
    , ljm.subscription_id 
    , ljm.frequency 
    , ljm.publisher 
    , ljm.price 
+1

這將給兩行,如果價格爲「Linux 4 U」發生了變化,不是說這是錯誤的,可能是他追求的東西:) – Andomar 2009-10-28 11:57:42

+0

這就是'應該'的地方;) – 2009-10-28 12:01:19

+0

美女...... xactly wht was needed ...比起很多4 pul的pple ...保持幫助'thers的gud工作......! – dev646 2009-11-03 05:50:21

1

你可以改變WHERE語句來查詢的最後日期爲每個日誌:

AND ljd.receipt_date = (
    SELECT max(subljd.receipt_date) 
    from lib_journal_details subljd 
    where subljd.journelname = ljd.journelname) 

確保從給表的子查詢不同的別名主查詢中的表格。

0

像這樣的東西應該適合你。

SELECT ljm.journelname 
     , ljm.subscription_id 
     , ljm.frequency 
     , ljm.publisher 
     , ljm.price 
     ,md.max_receipt_date 
FROM lib_journals_master ljm 
    , ( SELECT journal_id 
      , max(receipt_date) as max_receipt_date 
      FROM lib_journal_details 
      GROUP BY journal_id) md 
WHERE ljm.id = md.journal_id 
/

注意,我已經從刪除的表中從沒有任何貢獻的查詢子句。如果yopu爲了我們的利益簡化了您的方案,您可能需要更換它們。

+0

thanx你的時間兄弟... ;) – dev646 2009-11-03 05:51:18

0

聽起來像組的頂部。您可以在SQL Server中使用CTE


;WITH journeldata AS 
(
SELECT 
    ljm.journelname 
    ,ljm.subscription_id 
    ,ljm.frequency 
    ,ljm.publisher 
    ,ljm.price 
    ,ljd.receipt_date 
    ,ROW_NUMBER() OVER (PARTITION BY ljm.journelname ORDER BY ljd.receipt_date DESC) AS RowNumber 
FROM 
    lib_journals_master ljm 
    ,lib_subscriptionhistory lsh 
    ,lib_journal_details ljd 
WHERE 
    ljd.journal_id=ljm.id 
    AND ljm.subscription_id = ljm.subscription_id 
) 
SELECT 
    journelname 
    ,subscription_id 
    ,frequency 
    ,publisher 
    ,price 
    ,receipt_date 
FROM journeldata 
WHERE RowNumber = 1 
0

分成兩個查詢人會得到雜誌的名字和最新日期

declare table @table (journalName as varchar,saleDate as datetime) 

insert into @table 
select journalName,max(saleDate) from JournalTable group by journalName 

選擇您從表中所需要的所有領域,並加入@table與他們此。加入journalName。