我有一个查询,我得到了帮助,但我被困在另一点。
我的代码是
SELECT a.name, COUNT(*) AS num FROM table2 b
INNER JOIN table1 a
ON b.status_id=a.id
GROUP BY status_id
我现在要做的只是显示当前日期输入的结果?日期列位于表2中。日期列的格式是日期和时间(例如1341241153),它以这种方式由CRM自动设置。我不确定这是什么格式!
我只需要检查日期是否与当天匹配。我希望这很清楚。
这是一个MySQL数据库。
感谢您的任何帮助!
答案 0 :(得分:3)
使用此解决方案:
SELECT a.name, COUNT(*) AS num
FROM table2 b
INNER JOIN table1 a ON b.status_id = a.id
WHERE b.datecol >= UNIX_TIMESTAMP(CURDATE()) AND
b.datecol < UNIX_TIMESTAMP(CURDATE() + INTERVAL 1 DAY)
GROUP BY b.status_id
这将避免将日期列包装在一个函数中,这会使查询不可搜索(即无法使用索引)。通过在裸日期列上保持比较,MySQL仍然可以使用索引(如果你在日期列上设置它),它应该非常有效。
如果您 绝对知道 您输入的日期永远不会在将来某个时间(即明天或第二天),您可以进一步简化:
SELECT a.name, COUNT(*) AS num
FROM table2 b
INNER JOIN table1 a ON b.status_id = a.id
WHERE b.datecol >= UNIX_TIMESTAMP(CURDATE())
GROUP BY b.status_id
第二次条件检查已删除,因为它不需要检查它是否会在将来发生。
答案 1 :(得分:2)
试试这个::
SELECT a.name, COUNT(*) AS num FROM table2 b
INNER JOIN table1 a
ON b.status_id=a.id
where DATE(column_date) = DATE(now())
GROUP BY status_id
答案 2 :(得分:2)
您应该在包含from_unixtime()
等值的日期列上使用1341241153
函数
因为这些值似乎以unix时间戳格式存储。
示例:
mysql> select
-> from_unixtime( 1341241153 ) as 'my_datetime_1341241153',
-> date( from_unixtime( 1341241153 ) ) as 'my_date_1341241153',
-> curdate(),
-> curdate() > date( from_unixtime( 1341241153 ) ) 'is_today_later?',
-> curdate() = date( from_unixtime( 1341241153 ) ) 'is_today_equal?',
-> curdate() < date( from_unixtime( 1341241153 ) ) 'is_today_before?'
-> from
-> dual
-> \G
*************************** 1. row ***************************
my_datetime_1341241153: 2012-07-02 20:29:13
my_date_1341241153: 2012-07-02
curdate(): 2012-07-15
is_today_later?: 1
is_today_equal?: 0
is_today_before?: 0
1 row in set (0.00 sec)
您的查询应该是:
SELECT a.name, COUNT(*) AS num FROM table2 b
INNER JOIN table1 a
ON ( b.status_id=a.id and curdate() = date( from_unixtime( b.crm_date_time_column ) ) )
GROUP BY status_id