2013-04-25 5 views
0

У меня есть один сценарий, где я хочу получить счет, если разница между датами между двумя датами равна < = 14 дней. Это в первой таблице, я должен фильтровать записи, где любое одно значение DATE1 значения: < = 14 дней DATE2.dateiff между несколькими записями в SQL

For Ex: 
q1="SELECT DATE1 FROM DATE1_TABLE"; 
q2="SELECT DATE2 FROM DATE2_TABLE"; 

My simple query : 

SELECT 
    COUNT(*) 
FROM 
    DATE1_TABLE WHERE DATEDIFF(DD,DATE1,(SELECT DATE2 FROM DATE2_TABLE))<=14 

Но у меня есть несколько записей в обеих таблицах, но я хочу, чтобы выбрать любую запись, имеющую этой разницы, то она получит счетчик> 0.So, он бросает подзапрос ошибки возвращается более чем одну записи . Мне нужны некоторые решения для этого. Я использую SQL SERVER 2008

ПРИМЕЧАНИЕ. Я не могу использовать соединение здесь. Потому что мне нужны результаты из двух разных запросов. Спасибо заранее.

+0

Как вы отмечаете, то вторая таблица имеет много записей на нем. Итак, какие даты в первой таблице вы хотите сравнить, какие даты во втором - все из них, некоторые из них или что? Как вы хотите решить, какие записи сравнить с которыми? –

+0

Извините за неправильное объяснение. У меня есть 2 запроса, первый запрос не даст никаких дат, а второй запрос даст только одну дату. Мне нужно проверить любую дату в первом запросе <= 14 значения даты второго запроса. он вернет счет. Спасибо – mns

+0

ОК, вы только хотите выбрать одну дату со второй таблицы, но * какой из них - самый маленький, самый большой, медианный, какая-то другая дата ...? –

ответ

0

Вы не можете использовать ВЫБРАТЬ, который будет возвращать несколько значений, где функция ожидает скалярное значение ... однако вы можете присоединиться к этим таблицам:

SELECT 
    COUNT(DISTINCT dt1.*) 
FROM DATE1_TABLE dt1 INNER JOIN DATE2_TABLE dt2 ON DATEDIFF(DD,DATE1,DATE2)<=14 

Этот запрос будет объединять таблицы по значениям только тогда, когда они находятся в течение 14 дней и рассчитывать на уникальные значения из DATE1_TABLE. Я понятия не имею, насколько эффективна производительность.

+0

Вы * можете * использовать select, если select вернет только одно значение. –

+0

"где функция ожидает скалярное значение" –

1

Вы можете использовать TOP 1 пункт в запросе ..

SELECT TOP 1 * 
    FROM DATE1_TABLE 
    WHERE DATEDIFF(DD,DATE1,(SELECT DATE2 FROM DATE2_TABLE))<=14 
Смежные вопросы