2016-07-25 10 views
0

courseName = 'Music'を最新の日付で取得するにはどうすればよいですか?同じオブジェクト名で最新のレコードを日付で取得する

courseName  | dateOfEnrollment 
----------------|----------------------- 
Music   | 2016-07-24 
Art    | 2016-07-01 
Art    | 2016-07-23 
Music   | 2016-07-25 

私はそれがエラーを返し

SELECT courseName, dateOfEnrollment FROM MyDatabase.dbo.courseEnrollment WHERE courseName = 'Music' AND GETDATE() >= MAX(dateOfEnrollment) 

以下のステートメントを使用してみましたよう:それがnullでない場合

An aggregate may not appear in the WHERE clause unless it is in a subquery contained in a HAVING clause or a select list, and the column being aggregated is an outer reference. 

私の究極の目標は、IF文でその文を置くことです、私はテーブルに新しいデータを挿入します。

更新(私の答え):

は、この私のために働いている:

IF EXISTS (SELECT TOP 1 courseName, dateOfEnrollment FROM courseEnrollment WHERE courseName = 'Music' ORDER BY dateOfEnrollment DESC) 
    *Insert data into the table* 

ELSE 
    *No need to insert* 
クエリがどのように見えるが、あなたの主な目標を想定しなければならない方法です

答えて

4
SELECT 
    courseName, 
    dateOfEnrollment 
FROM 
    MyDatabase.dbo.courseEnrollment 
WHERE 
    courseName = 'Music' 
ORDER BY 
    dateOfEnrollment 
LIMIT 1 

- あなただけに必要「音楽」行があるか確認してください。dateOfEnrollment列には全く興味がありません。私は右か何かを逃したのですか?

だからあなたの最後のクエリ(状況に応じて行を挿入する)は、次のようになります。

SELECT 
CE.* 
FROM courseEnrollment CE 
INNER JOIN 
(
    SELECT 
     courseName, 
     MAX(dateOfEnrollment) max_enrollment_date 
    FROM courseEnrollment 
    WHERE courseName ='Music' 
) t 
ON CE.courseName = t.courseName AND CE.dateOfEnrollment = t.max_enrollment_date; 

注:これの出力

INSERT INTO courseEnrollment 
SELECT 'Music', CURDATE() FROM courseEnrollment 
WHERE courseName = 'Music'; 
+0

2または二つ以上のレコードが起こるどんなその後、最新の同じ日付が含まれている場合は? – Sadikhasan

+0

そこに2つの問題が見つかりました。 1) 'ORDER BY dateOfEnrollment'は、日付の昇順(ただし、降順であることが予想される)を意味する。2)最新の日付の音楽の中に複数の項目がある場合、常に出力に1がある。 – 1000111

+0

こんにちは@Damiano、あなたの返事をありがとう。私はどのようにIF文にクエリ全体を入れることができるか分かりますか?たとえば、結果の戻り値がない場合、テーブルは更新されません。それ以外の場合はテーブルを更新します。 – YWah

0

あなたはそれを試してみることができますMusicコースの複数のエントリに最新の日付がある場合、クエリに複数のエントリが含まれることがあります。


TEST:これらの与えられたデータに上記のクエリを実行する

CREATE TABLE courseEnrollment (
    courseName VARCHAR (100), 
    dateOfEnrollment date 
); 

INSERT INTO courseEnrollment (
    courseName, 
    dateOfEnrollment 
) 
VALUES 
    ('Music', '2016-07-24'), 
    ('Art', '2016-07-01'), 
    ('Art', '2016-07-23'), 
    ('Music', '2016-07-25'); 

あなたは以下のような出力が得られます:

出力:

courseName  dateOfEnrollment 
Music    2016-07-25 

EDIT:

WORKING DEMO

関連する問題