如果条件为mysql查询中的日期与更多表

时间:2013-07-19 17:32:38

标签: mysql date select

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

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是用户table的外键。我想得到这样的结果

User     TableName    ActionType    Date

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

如果dateupdated晚于dateadded show更新,则显示已插入。 因为这是来自销售表,所以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

3 个答案:

答案 0 :(得分:0)

使用GREATEST

SELECT GREATEST(dateupdated, dateadded)

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

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

我写的查询会解决您的请求,但我建议您再次考虑您的模型。

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

答案 2 :(得分:0)

SELECT user_name, 'sales',
      IF(dateadded>=dateupdated,'Inserted','Updated'),
      GREATEST(dateadded,dateupdated)
FROM users,sales
WHERE users.id = created_by