1

私は助けを得たクエリを持っていますが、別のビットで立ち往生しています。

私が持っているコードは

SELECT a.name, COUNT(*) AS num FROM table2 b 
INNER JOIN table1 a 
ON b.status_id=a.id 
GROUP BY status_id

私が今やりたいことは、現在の日付に入力された場合にのみ結果を表示することですか? 日付列は table2 にあります。日付列の形式は日付と時刻 (例: 1341241153) で、このように CRM によって自動的に設定されます。これは何のフォーマットかわかりません!

日付が現在の日付と一致するかどうかを確認するだけです。それが明確であることを願っています。

これは MySQL データベースです。

どんな助けでもありがたく受け取られます!

4

3 に答える 3

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

2 番目の条件チェックは、将来の日付かどうかをチェックする必要がないため、削除されます。

于 2012-07-15T19:37:13.007 に答える
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
于 2012-07-15T14:45:24.280 に答える
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
于 2012-07-15T15:18:34.127 に答える