0

MySQL について質問があります。「salesdate」(日付を含む)、「salestime」(時間を含む)、「remaining」(整数を含む) の 3 つの列を持つテーブルがあります。このテーブルには、過去の日付と将来の日付の両方が含まれています。現在の日付と時刻に最も近い値を「残り」から選択したいと考えています。

以下のクエリを作成しましたが、日付と時刻の両方の値が真である値のみを選択します。「salesdate」に昨日の日付の行がある可能性があるため、これは間違った結果を生成する可能性がありますが、すべての「salestime」値は現在の時刻よりも大きいため、現在のクエリはこれらを無視します...それらが最も近いものであっても現在の日付/時刻に。

私の現在のクエリ:

$result = mysql_query(
"SELECT remaining 
FROM quantity_time 
WHERE salesdate<=CURDATE() 
AND salestime<=CURTIME() 
ORDER BY salesdate DESC
LIMIT 1 ");

私がする必要があるのは、最初に日付を照会してから、何らかの方法でこのリストをフィルタリングして、現在の時刻に最も近い日付/時刻を表示することだと思いますか? しかし、どのように?あなたが助けることができるなら - 私は検索しましたが、これを行うための明確なステップバイステップの方法を見つけることができません. あなたの助けに感謝します。

4

3 に答える 3

0
SELECT remaining FROM (
SELECT remaining,
(UNIX_TIMESTAMP(salesdate) - UNIX_TIMESTAMP()) AS difference
FROM quantity_time 
WHERE salesdate<=CURDATE() 
AND salestime<=CURTIME()
) subquery
ORDER BY difference DESC
LIMIT 1

これが非常にパフォーマンスが高いかどうかはわかりませんが、少なくとも機能するはずです。最初にサブクエリを作成し、時間差を秒単位で計算し、次に差によって並べ替えます。

于 2013-04-18T20:19:50.020 に答える
0

現在の日時に最も近いとはどういう意味ですか?

ある程度の範囲を入れてください。どれだけ正確かはわかりませんが、

SELECT remaining 
FROM quantity_time 
WHERE salesdate<=CURDATE() 
AND salestime BETWEEN date_sub(NOW(), INTERVAL 24 HOUR) AND date_add(NOW(), INTERVAL 24 HOUR)
ORDER BY salesdate DESC
LIMIT 1
于 2013-04-18T20:20:06.850 に答える