2009-10-28 11 views
0

mensuel mondial des entreprises 1256987 10 2009-10-28Requête SQL ... sélection de valeurs multiples multiples. Avait besoin d'aide

mensuel mondial des entreprises 1256987 10 2009-09-23

mensuel mondial des entreprises 1256987 10 2009-08-18

Linux 4 U 456734 mensuel 25 2009-12-24

mensuel Linux 4 U 456734 25 2009-11-11

Linux 4 U 456734 25 mois 2009-10-28


-je obtenir ce résultat avec la requête:

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 

Ce que je besoin est la date dans chaque journal?

J'ai essayé cette requête:

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) 

Mais il me donne le maximum de la colonne entière. Mon résultat requis aura deux dates (maximum de chaque magazine), mais cette requête me donne un seul?

+1

S'il vous plaît formater la question en particulier le code afin qu'il soit lisible – Mark

+0

désolé ... j'ai essayé mais comme un novice, ne pouvait pas le formater assez bien ... :( – dev646

Répondre

0

Vous devez utiliser Group By si vous avez besoin de la date Max from. devrait ressembler à ceci:

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

Cela donnerait deux lignes si le prix pour "Linux 4 U" a changé.Ne pas dire que c'est faux, pourrait être ce qu'il est après :) – Andomar

+0

Cest où le 'Devrait' vient;) –

+0

beauté ... xactly ce qui était nécessaire ...merci beaucoup 4 ol d 'uple ... continuez le travail de gou - vernement d' aide 'thers ...! – dev646

1

Vous pouvez changer la clause WHERE pour rechercher la dernière date pour chaque journal:

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

Assurez-vous de donner à la table dans la sous-requête d'un alias différent de la table dans la requête principale.

0

Quelque chose comme ceci devrait fonctionner pour vous.

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 
/

Notez que j'ai supprimé les tables de la clause FROM qui n'apportent rien à la requête. Vous devrez peut-être les remplacer si yopu a simplifié votre scénario pour notre bénéfice.

+0

merci pour votre temps bro ... ;) – dev646

0

On dirait le haut du groupe. Vous pouvez utiliser un CTE dans 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 
0

séparé cela en deux requêtes on obtenir le nom du journal et date

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

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

sélectionner tous les champs dont vous avez besoin de votre table et rejoindre @table avec eux . rejoindre sur journalName.