我在MySQL数据库中有一个表名为a_campaign,其中包含以下列
CampaignId | name | Created Date | Modified Date |
现在我想要的是从最近创建或最近更新的上表中显示最新的5条记录......
我不知道如何根据我的要求获取这些记录..如果有人可以指导我的话,那就好了。
我的结果数据应该像以下一样被提取
Campaign Id | Campaign Name | Status(Updated/Created) | Time (Created/Modified Before)
最后一列应显示广告系列创建或更新的时间,与当前日期相比,在多少个月/周/天/小时/分钟/秒之前)
请帮助我..
答案 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