Sql Query查找创建或更新的最后五条记录以及创建和修改日期的时间之前?

时间:2013-02-19 05:13:10

标签: mysql sql database

我在MySQL数据库中有一个表名为a_campaign,其中包含以下列

CampaignId | name | Created Date | Modified Date | 

现在我想要的是从最近创建或最近更新的上表中显示最新的5条记录......

我不知道如何根据我的要求获取这些记录..如果有人可以指导我的话,那就好了。

我的结果数据应该像以下一样被提取

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

最后一列应显示广告系列创建或更新的时间,与当前日期相比,在多少个月/周/天/小时/分钟/秒之前)

请帮助我..

enter image description here

3 个答案:

答案 0 :(得分: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   

答案 1 :(得分:1)

所以我不太了解你想要的结果集结构,但要按任一列排序,你可以这样做:

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

请注意,这会进行全表扫描。因此,您可能希望在Created和Modified上添加约束(比如一个需要比24小时前更新)以限制结果集的大小(日期列上的索引会有帮助)

另外,为简单起见,我假设Modified总是大于或等于Created。因此,您应该让您的应用在行创建时填充两者创建和修改,并且仅在更改时更新已修改。如果这样做,您可以简化查询以仅按修改列DESC进行排序,并获得前5个。

[编辑]我刚刚看到您添加了数据集的示例,表明在创建行时填充了Created和Modified 。在这种情况下,听起来你只需要对Modified列进行排序:

select *
from a_campaign
order by Modified desc 
limit 5;

答案 2 :(得分: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