sql server: выражение неблевого типа, указанное в контексте, где ожидается условие

#sql-server

#sql-сервер

Вопрос:

Я выполняю этот код в postgresql, и он выполняется нормально.

 SELECT t.anonymous_id AS anonym_id, 
    (select event_name 
        from tracks t1 
            where t1.anonymous_id = t.anonymous_id and user_id is null order by received_at desc limit 1) as last_null, 
    (select event_name 
        from tracks t2 
            where t2.anonymous_id = t.anonymous_id and user_id is not null ) as first_notnull
FROM tracks t
GROUP BY anonym_id
ORDER BY anonym_id;
  

Затем я снова записываю его в sql server и получаю некоторые ошибки. После попытки исправления мой код выглядит следующим образом:

 SELECT t.anonymous_id AS anonym_id 
FROM tracks t
JOIN
    (select event_name 
        from tracks t1 
            where t1.anonymous_id = anonymous_id and user_id is null order by received_at desc offset 0 rows) as last_null, 
    (select event_name 
        from tracks t2 
            where t2.anonymous_id = anonymous_id and user_id is not null) as first_notnull
GROUP BY anonym_id
ORDER BY anonym_id;
  

В настоящее время я получил сообщение об ошибке

 An expression of non-boolean type specified in context where a condition is expected near ','
  

Почему? И как это исправить?

Комментарии:

1. SQL Server не поддерживает, LIMIT он использует TOP , с довольно другим синтаксисом. Какова ваша фактическая база данных?

2. Вы не можете просто скопировать SQL из одной СУБД, а затем вставить его в другую и ожидать, что он будет работать. Все они используют разные диалекты. Вы должны «перевести» его с одного диалекта на другой. В вашем JOIN подзапросе last_null отсутствует ON , и затем вы используете этот старый синтаксис соединения ANSI-89 для first_notnull

3. Зачем переписывать в соединение? Если вы используете top .. вместо limit в первом запросе, это должно работать и с SQL Server

4. Однако эти подзапросы находятся в SELECT вашем запросе PostgreSQL. Почему они перешли на FROM в вашем запросе T-SQL?

5. @TimBiegeleisen, я заменяю limit на использование offset. Моей фактической базой данных является sql server. Я думаю, что моя проблема заключается в использовании соединения с подзапросом в качестве конечного ответа