SQL查询...多个最大值选择。需要帮助

时间:2009-10-28 11:46:22

标签: sql selection max

商业世界1256987每月10 2009-10-28

商业世界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)

但是它给了我整个专栏的最大值。我需要的结果将有两个日期(每个杂志的最大值),但这个查询只给我一个?

5 个答案:

答案 0 :(得分:1)

您可以更改WHERE语句以查找每个日记的最后日期:

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

确保为子查询中的表提供与主查询中的表不同的别名。

答案 1 :(得分: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

答案 2 :(得分: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
/

请注意,我已从FROM子句中删除了对查询没有任何贡献的表。如果yopu为了我们的利益简化了您的方案,您可能需要更换它们。

答案 3 :(得分: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 

答案 4 :(得分:0)

将其分为两个查询,一个将获得期刊名称和最新日期

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

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

从表格中选择所需的所有字段,然后加入@table。加入journalName。