2017-07-18 86 views
0

我已经构建了这个SQL查询,它应该将最高日期值放在field_result之内,但它不能按预期工作。检查一个unix_timestamp是否大于另一个

SELECT 
    field_one, 
    field_two, 
    IF(((field_one IS NOT NULL AND field_one <> '') AND 
     (field_one > TableB.field_two)), 
     unix_timestamp(field_one), 
     unix_timestamp(TableB.field_two)) AS result 
FROM TableA 
LEFT JOIN TableB ON TableB.id = TableA.id 

条件很简单。

  • field_one必须存在,并且包含某种价值。
  • 如果field_one > field_two显示field_one否则显示field_two

它产生的结果

"field_one", "field_two", "field_result" 
"1495681346","1500328106","1500328106" 
"1500342725","1500328106","1500328106" 
"1499922505","1500329807","1500329807" 
"1500343148","1500328106","1500328106" 
"1500329593","1500328106","1500328106" 

有关row 2某些原因field_result值不1500342725(此值是约大于150032810614619更大)。

我想我已经得到了正确的语法,但我不能确定,因为结果是不是我期待

+0

请清除您的查询,并给我们一个可重复的例子。 –

回答

1

如果你想找到两个领域的更大然后考虑使用MySQL的GREATEST()功能。

SELECT 
    field_one, 
    field_two, 
    GREATEST(COALESCE(UNIX_TIMESTAMP(field_one), -1), 
      COALESCE(UNIX_TIMESTAMP(field_two), -1)) AS result 
FROM TableA 
+0

这不是我给你的查询。两个字段列的类型是什么?他们是日期型吗? –

+0

给我一个可重复的例子。 –

+0

我创建了一个[fiddle](http://sqlfiddle.com/#!9/388c0/1),你的例子其实是正确的,我在已经格式化的时间戳字段上运行'unx_timestamp'(因此导致不正确的结果)。非常感谢你。 – Killrawr

相关问题