1

odbc-jdbc bridge私のプロジェクトで を使用しており、 から 2 つのデータを選択し、アプリケーション側の2にdatabaseデータを保存する必要があります。これが私のテーブルの例です。variablesjava

SITE_ID ------- DEV_ID ------- SCHEDULE_TIME ------- VALUE_ENUM ------- IDX
---------------------------------------------------------------------------
1               3000           09:30:00              1                    1
1               3000           11:30:00              0                    2
1               3000           12:00:00              1                    3
1               3000           14:00:00              0                    4
1               3000           18:30:00              1                    5
1               3000           20:30:00              0                    6
1               4000           05:00:00              1                    1 
1               4000           13:30:00              0                    2
1               4000           16:30:00              1                    3
1               4000           18:30:00              0                    4

私がやりたいのはselect SCHEDULE_TIME、最後の 2IDXの where DEV_IDis3000であるため、変数に保存18:30:00 and 20:30:00したいと思います。私が試したステートメントの例は次のとおりです。

select SCHEDULE_TIME from ARRAY_BAC_SCH_Schedule order by IDX desc limit 1 where DEV_ID = 3000
select SCHEDULE_TIME from ARRAY_BAC_SCH_Schedule order by IDX desc limit (1,1) where DEV_ID = 3000

SELECT TOP 1 SCHEDULE_TIME FROM ARRAY_BAC_SCH_Schedule WHERE DEV_ID = 3000 ORDER BY IDX DESC

今は、select ステートメントを Java 側に実装する前に、クエリ ツールで動作させる方法について心配しています。ありがとう、ビーフ。

4

6 に答える 6

1

詳細は DB によって少し異なりますが、クエリは次のようになります。

SELECT TOP 2 SCHEDULE_TIME 
FROM ARRAY_BAC_SCH_Schedule
WHERE DEV_ID = 3000
ORDER BY IDX Desc

または、1 行で:

SELECT TOP 2 SCHEDULE_TIME FROM ARRAY_BAC_SCH_Schedule WHERE DEV_ID = 3000 ORDER BY IDX Desc
于 2011-09-22T17:33:44.480 に答える
1

SQL Serverの場合、使用する必要があります

SELECT TOP 2 SCHEDULE_TIME from (select SCHEDULE_TIME FROM ARRAY_BAC_SCH_Schedule WHERE DEV_ID = 3000 ORDER BY IDX DESC) as inner

ヘマルが言ったように。

のようなクエリには注意してください。

select TOP 2 SCHEDULE_TIME FROM ARRAY_BAC_SCH_Schedule WHERE DEV_ID = 3000 ORDER BY IDX DESC

それは間違っているからです。SQL Server は、一番上、次にその順序を実行します。

PostgreSQL または MySQL では、クエリの limit と end を使用する必要があります。制限は where 部分の後にあります。

Oracle では、where 部分内で rownum を使用する必要があります。

于 2011-09-22T17:40:44.900 に答える
1

多分私は何かが足りない。ただ実行しない理由はありますか:

select SCHEDULE_TIME from ARRAY_BAC_SCH_Schedule order by IDX desc limit 2 where DEV_ID = 3000

これにより、20:30:00 と 18:30:00 を含む 2 行が返されます。

于 2011-09-22T17:28:41.367 に答える
1

もしそうmysqlなら

 select SCHEDULE_TIME from ARRAY_BAC_SCH_Schedule where DEV_ID = 3000 order by IDX desc limit 2
于 2011-09-22T17:28:59.437 に答える
1

おもう

SELECT TOP 2 * from (select SCHEDULE_TIME FROM ARRAY_BAC_SCH_Schedule WHERE DEV_ID = 3000 ORDER BY IDX DESC) as inner
于 2011-09-22T17:29:52.417 に答える
1

サブクエリでそれを行うことができます:

select * from array_bac_sch_schedule where (value_enum,idx) in (select value_enum,idx from array_bac_sch_schedule where dev_id=3000) order by schedule_time desc limit 2;

主キーとして value_enum と idx を使用しました。

于 2011-09-22T17:47:28.473 に答える