0

ビジネスワールド 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)

しかし、列全体から最大値が得られます。必要な結果には 2 つの日付 (各雑誌の最大数) がありますが、このクエリでは 1 つしか返されませんか?

4

5 に答える 5

1

WHEREステートメントを変更して、各ジャーナルの最終日を検索できます。

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

サブクエリのテーブルには、メインクエリのテーブルとは異なるエイリアスを指定してください。

于 2009-10-28T11:55:26.453 に答える
0

Max from dateが必要な場合は、GroupByを使用する必要があります。次のようになります。

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
于 2009-10-28T11:53:25.070 に答える
0

これを 2 つのクエリに分けて、ジャーナル名と最新の日付を取得します。

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

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

テーブルから必要なすべてのフィールドを選択し、それらを @table に結合します。ジャーナル名に参加します。

于 2009-10-28T12:13:21.053 に答える
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 が私たちの利益のためにシナリオを単純化した場合は、それらを置き換える必要があるかもしれません。

于 2009-10-28T12:04:55.327 に答える
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 
于 2009-10-28T12:05:23.970 に答える