1

我在我的项目中使用了一个odbc-jdbc bridge,我需要从中选择 2 条数据database并将数据保存到我的应用程序一侧的2variables中。java这是我的桌子的一个例子。

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_IDis 3000,所以我想保存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

现在我只是担心如何让选择语句在查询工具中工作,然后再在 java 端实现它。谢谢,牛肉。

4

6 回答 6

1

也许我错过了一些东西。您是否有理由不只是运行:

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

这应该返回 2 行,包含 20:30:00 和 18:30:00。

于 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 TOP 2 SCHEDULE_TIME 
FROM ARRAY_BAC_SCH_Schedule
WHERE DEV_ID = 3000
ORDER BY IDX Desc

或者,在一行上:

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

就像 Hemal 告诉你的那样。

小心查询,如

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

因为那是错误的。SQL Server 先执行后序。

在 PostgreSQL 或 MySQL 中,您应该使用限制和查询结束。限制在 where 部分之后。

在 Oracle 中,您应该在 where 部分中使用 rownum。

于 2011-09-22T17:40:44.900 回答
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 回答