1

私が実行しようとしているクエリに誰かが目を向けることができるかどうか疑問に思っていましたが、それを行う最善の方法についてはよく考えられません。

Contact テーブルの Email、Firstname、Surname と、Hotline テーブルの HotlineID と Last Action が必要です。Hotline テーブルに格納されている「フラグ」列をフィルタリングして、値が 1 の行のみを表示したいと考えています。次のクエリでこれを達成しました。

select Email, FirstName, Surname, HotlineID, LastAction 
from Hotline 
left join contact on contact.companyid=hotline.CompanyID 
                 and contact.ContactID=hotline.ContactID 
where
hotline.Flag = 1

今私ができないビット。アクション テーブルには、「ホットライン ID」、「コメント」、「日付」の 3 つの列があります。アクション テーブルのホットライン ID は、ホットライン テーブルのホットライン ID にリンクされています。ホットラインごとに複数のコメントを追加でき、投稿された日付が [日付] 列に記録されます。

最初のクエリから返された行のうち、最大日付 (最後に記録されたコメント) が現在の日付から 48 時間以内の行をさらに除外したいと考えています。ビジュアルスタジオで「ad​​dwithvalue」を使用して日付変数を設定していますが、テスト目的で「2014-12-04」を使用しています

私はこれを思いつきましたが、失敗しました。しかし、私はなぜわからないのですか?

Select Email, FirstName, Surname, hotline.HotlineID, LastAction 
from Hotline
left join Contact on Contact.CompanyID=Hotline.CompanyID 
                 and Contact.ContactID=Hotline.ContactID 
inner join Actions on actions.HotlineID=hotline.HotlineID 
where hotline.flag=1 and CONVERT(VARCHAR(25), Max(Date), 126) LIKE '2014-12-03%'

SQL Server を使用しています。

4

3 に答える 3

0

John のクエリは、派生テーブルで Actions テーブルの代わりに Hotlines テーブルを使用する以外は有効です。

SELECT Email, FirstName, Surname, HotlineID, LastAction 
FROM Hotline h
INNER JOIN
(SELECT hotlineID, max(date) as Date FROM actions a1 GROUP BY hotlineID) a
ON h.hotlineID = a.hotlineID
LEFT JOIN contact c 
ON c.companyid=h.CompanyID and c.ContactID=h.ContactID          
WHERE
hotline.Flag = 1 
and datediff(hour,[Date],getdate()) > 48
于 2014-12-05T16:07:41.737 に答える