0

我有三个要显示数据的表。这是一个表的示例

CREATE TABLE IF NOT EXISTS `sales` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`dateadded` datetime NOT NULL,
`dateupdated` datetime NOT NULL,
`created_by` int(44) NOT NULL, PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=924 ;)

这里 created_by 是用户表的外键。我想得到这样的结果

User     TableName    ActionType    Date

XYZ       sales        Inserted        2013-04-23 00:00:00
XYZ       sales        updated         2013-05-23 00:00:00   

如果 dateupdated 晚于 date added 则显示已更新,否则显示已插入。因为这是来自 sales 表,所以 tableName 是 sales 同样对于所有三个表,如何做到这一点?

用户表如下所示

Id  User_Name
 1    XYZ

销售表有这个数据

1    2013-04-23 00:00:00    2013-04-23 00:00:00    1
2    2013-04-23 00:00:00    2013-05-23 00:00:00    1
4

3 回答 3

0
SELECT user_name, 'sales',
      IF(dateadded>=dateupdated,'Inserted','Updated'),
      GREATEST(dateadded,dateupdated)
FROM users,sales
WHERE users.id = created_by 
于 2013-07-19T19:00:57.173 回答
0

利用GREATEST

SELECT GREATEST(dateupdated, dateadded)

您可以根据需要指定任意数量的列,因此您也可以同时对所有表执行此操作。

于 2013-07-19T17:39:30.907 回答
0

尝试这个:

SELECT u.user, 'sales', 
case
    when s.dateadded = s.dateupdated
    then 'Inserted'
    else 'Updated'
end,
case
    when s.dateadded = s.dateupdated
    then s.dateadded
    else s.dateupdated
end
FROM users u
JOIN sales s
ON u.id = s.created_by 

我写的查询应该解决您的请求,但我建议您重新考虑您的模型。

我认为您的销售表是每个动作的行,每个动作都有一个类型化(插入、更新等),每一行的日期都是唯一的。

于 2013-07-19T18:03:44.990 回答