1

頭を悩ませようとしていますが、そのようなレコードを選択したWHERE item_id='$item_id' AND date(datetime)='2012-06-25'場合、そのレコードが存在しない場合は、その日付以降の最も近い最新のレコードを取得したいと思います。クエリでそれをどのように達成できますか?

現時点で考えられる唯一の方法は、num_of_rowsが0の場合、その日に3日間先を追加し、再度検索してDESC datetime LIMIT 1(複数の行がある場合)を取得することです。しかし、私がクエリだけでそれを実行できることを誰が知っていますか。

レコードには、1日に複数の行が含まれる可能性があります。したがって、特定の日付にレコードがない場合、同じ$ item_idを指定して、次に近い利用可能なデータを取得するにはどうすればよいでしょうか。

4

3 に答える 3

4
SELECT *
 FROM table
 WHERE field <= '2012-06-25'
 ORDER BY field DESC
 LIMIT 1
于 2012-07-26T11:25:03.610 に答える
0

これにより、クエリに入力した日付に最も近いアイテムが返されます。ただし、前または後を検索するのではなく、入力した内容に最も近い日付を見つけるだけです。

select 
     min(abs(DATEDIFF(date(datetime),'2012-06-25'))) as minDiff
    ,yourID
from table1 
group by yourID 
order by 1 asc;
于 2012-07-26T11:26:48.643 に答える
0

私はこれがあなたが探しているものだと思います:

SELECT *
FROM my_table
WHERE datetime BETWEEN '2012-06-25 00:00:00' AND 
                       DATE_ADD('2012-06-25 00:00:00', INTERVAL 3 DAY)
ORDER BY datetime ASC
LIMIT 1;

また、パフォーマンスを向上させるために、フィールド日時にインデックスを作成します。

于 2012-07-26T11:30:35.423 に答える