문제

비즈니스 세계 1256987 월간 1099-10-28

비즈니스 세계 1256987 월간 1099-09-23

비즈니스 세계 1256987 월간 1099-08-18

Linux 4 U 456734 월 2599-12-24

Linux 4 U 456734 월 2599-11-11

Linux 4 U 456734 월 2599-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)

그러나 전체 열에서 최대 값을 제공합니다. 필요한 결과는 두 개의 날짜 (각 잡지의 최대 값)가 있지만이 쿼리는 나에게 하나만 제공합니까?

도움이 되었습니까?

해결책

날짜부터 최대가 필요한 경우 그룹을 사용해야합니다. 다음과 같이 보일 것입니다.

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

다른 팁

각 저널의 마지막 날짜를 찾아 Where 문을 변경할 수 있습니다.

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

서브 쿼리의 테이블에 메인 쿼리의 테이블과 다른 별칭을 제공하십시오.

이와 같은 것이 당신에게 효과적입니다.

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 Clause에서 테이블을 제거했습니다. Yopu가 우리의 이익을 위해 시나리오를 단순화 한 경우 교체해야 할 수도 있습니다.

이것을 두 개의 쿼리로 분리하여 저널 이름과 최신 날짜가 나타납니다.

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

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

테이블에서 필요한 모든 필드를 선택하고 @table에 가입하십시오. JournalName에 가입하십시오.

그룹의 최고처럼 들립니다. 당신은 a를 사용할 수 있습니다 CTE SQL Server에서 :


;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 
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top