-1

次の列を持つMySQLデータベースにa_campaignとして1つのテーブル名があります

CampaignId | name | Created Date | Modified Date | 

今私が欲しいのは、上記のテーブルから最近作成されたものまたは最近更新されたものとして最新の5つのレコードを表示することです...

私の要件に従ってこのレコードを取得するにはどうすればよいかわかりません..誰かが私を案内できるならお願いします..

結果のデータは次のように取得する必要があります

Campaign Id | Campaign Name | Status(Updated/Created) | Time (Created/Modified Before) 

最後の列は、今日の日付と比較して、何ヶ月/何週/何日/何時間前/何分/秒前にキャンペーンが作成または更新された時間を表示する必要があります)

私を助けてください..

ここに画像の説明を入力

4

3 に答える 3

2

これで達成できるはずです。最後の列を必要に応じてフォーマットするように調整できますが、これにより、アクティビティが何分前に発生したかがわかります

SELECT 
    campaignId,
    name,
    CASE WHEN modifieddate > createddate THEN 'Updated' ELSE 'Created' END AS type_of_activity,
    modifieddate AS latest_activity,
    TIMESTAMPDIFF(MINUTE,modifieddate,NOW()) AS minutes_ago
FROM
    a_campaign
ORDER BY 
    modifieddate DESC   
于 2013-02-19T05:45:10.010 に答える
1

したがって、目的の結果セットの構造をよく理解していませんが、いずれかの列で並べ替えるには、次のようにすることができます。

select *, greatest(Created, Modified) as lastDate
from a_campaign
order by lastDate desc 
limit 5;

これは完全なテーブル スキャンを行うことに注意してください。そのため、結果セットのサイズを制限するために、Created と Modified の両方に制約を追加して (たとえば、どちらかが 24 時間前よりも新しい必要があるとします)、結果セットのサイズを制限することをお勧めします (日付列のインデックスが役立ちます)。

さらに、これを簡単にするために、Modified は常に Created 以上であると仮定します。したがって、行の作成時に Created と Modified の両方をアプリに入力し、変更時に Modified のみを更新する必要があります。これを行うと、クエリを単純化して Modified 列の DESC のみで並べ替え、上位 5 件を取得できます。

[編集]行の作成時にCreated と Modified の両方取り込まれていることを示す、データセットのサンプルを追加したところを見ました。その場合、Modified 列で並べ替えが必要なように思えます。

select *
from a_campaign
order by Modified desc 
limit 5;
于 2013-02-19T05:28:32.263 に答える
0

こちらの手続きをご利用ください

DECLARE @TABLES TABLE(ID INT , Name NVarchar(50),status NVarchar(50), time int,time1 datetime)

INSERT INTO @TABLES
SELECT ID,Name,'Created',DATEDIFF(D,CreatedDate,GETDATE()),CreatedDate FROM Compaign WHERE CreatedDate > ModifiedDate

INSERT INTO @TABLES
SELECT ID,Name,'Updated',DATEDIFF(D,ModifiedDate,GETDATE()),ModifiedDate FROM Compaign WHERE CreatedDate <= ModifiedDate

select ID 'Campaign Id' ,Name 'Campaign Name', status 'Status(Updated/Created)', time 'Time (Created/Modified Before)' from @TABLES order by time1 asc
于 2013-02-19T08:20:19.120 に答える