从最后2行sql中选择数据

时间:2011-09-22 17:24:04

标签: java sql select jdbc-odbc

我在我的项目中使用了odbc-jdbc bridge,我需要从database中选择2条数据并将数据保存到我variables侧{2} 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 IDX DEV_ID的最后2 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 一个变量,我尝试过的一些陈述的例子是:

{{1}}

现在我只是担心如何在我在java端实现它之前让select语句在Query工具中工作。谢谢,牛肉。

6 个答案:

答案 0 :(得分: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。

答案 1 :(得分:1)

如果是mysql那么

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

答案 2 :(得分:1)

我认为

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

答案 3 :(得分: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

答案 4 :(得分: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。

答案 5 :(得分:1)

你可以用subquerys做到这一点:

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作为主键。