-1

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

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 回答