2013-06-04 2 views
0

У меня есть разъяснение, как я могу запросить.Уточнение в запросе Sql

Я предполагаю получить записи, которые лежат в определенном временном диапазоне.

У меня есть запись в таблице A, которая имеет время начала как 1900-01-01 21: 00: 00.0 и EndTime как 1900-01-01 22: 00: 00.0

и у меня есть еще один стол B, который имеет STARTTIME, как 1900-01-01 21: 47: 43,0 и Конечное время, как 1900-01-01 21: 47: 48,0

Теперь моя задача состоит в том, чтобы найти все записи в tabl е А, который имеет STARTTIME и EndTime из таблицы B.

Первоначально я использовал в качестве запроса следующим образом:

select * 
from A 
where startTime between '1900-01-01 21:47:43.0' and '1900-01-01 21:47:48.0' 

и я не получил никаких результатов.

А потом я попробовал следующий запрос

select * 
from A 
where startTime < '1900-01-01 21:47:43.0' and startTime > '1900-01-01 21:47:48.0' 

и я получил одну строку.

В таблице А у меня есть диапазоны, такие как:

1900-01-01 21:00:00.0 - 1900-01-01 22:00:00.0 
1900-01-01 22:00:00.0 - 1900-01-01 23:00:00.0 
1900-01-01 23:00:00.0 - 1900-01-01 23:30:00.0 
. 
. 
. 

и так далее.

И в таблице B я строки начинаются и EndTimes как

1900-01-01 21:27:30.0 - 1900-01-01 21:27:55.0 
1900-01-01 22:11:22.0 - 1900-01-01 22:11:44.0 
1900-01-01 23:22:11.0 - 1900-01-01 23:22:55.0 
. 
. 
. 
and so on. 

И я должен взять STARTTIME и EndTime из таблицы B и соответствует слот в таблице А и получить результаты.

Итак, мой первый способ правильного запроса или второй способ правильный или есть ли другой способ сделать это.

Редактировать

Поскольку мы пытаемся найти записи в таблице А, где существует диапазон я пытался использовать начало и EndTimes из B следующим образом:

select * 
    from A 
     and '1900-01-01 21:47:43.0' between startTime and endTime 
     and '1900-01-01 21:47:48.0' between startTime and endTime 
+0

Это зависит от того, что вы хотите получить, хотите ли вы, чтобы время начала и окончания совпало между двумя таблицами? Или вы хотите найти записи в B, которые находятся в пределах диапазона от таблицы A? –

+0

@Goat_CO: Я хочу, чтобы все записи в таблице A инкапсулировали как startTime, так и endTime записи в таблицу B. В этом случае, что я должен делать. –

+0

Это запутанно, потому что в верхней части вашего вопроса вы показываете значения для A, которые отличаются от значений для A внизу, а значения для B сверху, которые отличаются от значений для B внизу. –

ответ

0

Я думаю, Проще всего было бы соединить таблицы, используя BETWEEN

SELECT A.* 
FROM A 
JOIN B 
ON b.start_time BETWEEN a.start_time AND a.end_time 
AND b.end_time BETWEEN a.start_time AND a.end_time 

Это будет возвращать все от а где как начать и е й раз от B инкапсулируются диапазоном в А.

Ваш второй запрос не совсем выглядеть правильно, так как вы сравниваете start_time с обеих сторон, но эта идея подобно тому, как это:

SELECT A.* 
FROM A 
JOIN B 
ON a.start_time < b.start_time 
AND a.end_time > b.end_time 

Любой запрос должен возвращать диапазоны от A, которые инкапсулируют время начала работы из B.

+0

Спасибо за ответ. Здесь ваш второй запрос возвращает одну строку, но ваш первый запрос, в который вы присоединились к таблице 2, не возвращает строк. –

+0

Здесь ваш второй запрос возвращает одну строку, но ваш первый запрос, в который вы присоединились к таблице 2, не возвращает строк. Время начала работы '1900-01-01 21: 00: 00' не происходит между' 1900-01-01 21 : 47: 43.0' и '1900-01-01 21: 47: 48.0' и A endTime' 1900-01-01' не происходит между '1900-01-01 21: 47: 43.0' и' 1900-01- 01 21: 47: 48,0'. Итак, как исправить первый запрос. –

+0

A - таблица с диапазонами, не так ли? Первый запрос говорит, что start_time of b должен находиться между диапазонами A, а end_time of b должен находиться между диапазонами A, полностью инкапсулированными. если диапазоны находятся в A, которые должны работать. –