sql查询到条件中的第一行

vyswwuz2  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(464)

我有一个sql查询:

  1. SELECT (CASE WHEN count(_days) > 0 THEN 'yes' ELSE 'No' END) as availability
  2. FROM (
  3. SELECT count(roomTypeDay2.room_type_id) as _days
  4. FROM room_type_day as roomTypeDay2
  5. LEFT JOIN room_type as roomType2 on roomTypeDay2.room_type_id = roomType2.id
  6. WHERE roomType2.accommodation_id=3
  7. AND roomTypeDay2.date IN ( '2018-06-09 00:00:00','2018-06-10 00:00:00','2018-06-11 00:00:00')
  8. GROUP BY roomTypeDay2.room_type_id
  9. HAVING COUNT(roomTypeDay2.room_type_id) = 3
  10. ) as disponible

这很好,但是现在,我想过滤第一个日期行(2018-06-09 00:00:00)是否
“最短住宿时间<=3天,最长释放时间<=2天”
参数,但我不知道怎么做。
我尝试将以下行添加到查询:
和(roomtypeday2.date='2018-06-09 00:00:00'和roomtypeday2.min\u night\u stay<=3和roomtypeday2.release\u days<=2)
但这不是正确的查询。
乳突

  1. SELECT (CASE WHEN count(_days) > 0 THEN 'yes' ELSE 'No' END) as availability
  2. FROM (
  3. SELECT count(roomTypeDay2.room_type_id) as _days
  4. FROM room_type_day as roomTypeDay2
  5. LEFT JOIN room_type as roomType2 on roomTypeDay2.room_type_id = roomType2.id
  6. AND roomType2.accommodation_id=3
  7. WHERE roomTypeDay2.date IN ( '2018-06-09 00:00:00','2018-06-10 00:00:00','2018-06-11 00:00:00')
  8. GROUP BY roomTypeDay2.room_type_id
  9. HAVING COUNT(roomTypeDay2.room_type_id) = 3
  10. ) as disponible

解决方案

  1. SELECT (CASE WHEN count(_days) > 0 THEN 'yes' ELSE 'No' END) as availability
  2. FROM (
  3. SELECT count(roomTypeDay2.room_type_id) as _days
  4. FROM room_type_day as roomTypeDay2
  5. LEFT JOIN room_type as roomType2 on roomTypeDay2.room_type_id = roomType2.id
  6. WHERE roomType2.accommodation_id=3
  7. AND roomTypeDay2.num_rooms_available > 0
  8. AND (roomTypeDay2.date = '2018-06-12 00:00:00' AND roomTypeDay2.min_night_stay <= 2 AND roomTypeDay2.release_days <= 2 )
  9. OR roomTypeDay2.date IN ( '2018-06-13 00:00:00','2018-06-14 00:00:00')
  10. GROUP BY roomTypeDay2.room_type_id
  11. HAVING COUNT(roomTypeDay2.room_type_id) = 3
  12. ) as disponible
v9tzhpje

v9tzhpje1#

这是你的 WHERE 条款:

  1. WHERE roomTypeDay2.date IN ('2018-06-09 00:00:00',
  2. '2018-06-10 00:00:00',
  3. '2018-06-11 00:00:00')

现在,对于第一次约会,您需要附加条件。使用 AND 以及 OR 带圆括号:

  1. WHERE
  2. (
  3. roomTypeDay2.date = '2018-06-09 00:00:00'
  4. AND
  5. roomTypeDay2.min_night_stay <= 3
  6. AND
  7. roomTypeDay2.release_days <= 2
  8. )
  9. OR
  10. roomTypeDay2.date IN ('2018-06-10 00:00:00','2018-06-11 00:00:00')
展开查看全部
blmhpbnm

blmhpbnm2#

  1. SELECT
  2. (
  3. CASE WHEN count(_days) > 0 THEN 'yes' ELSE 'No' END
  4. ) as availability
  5. from
  6. (
  7. SELECT
  8. count(roomTypeDay2.room_type_id) as _days
  9. FROM
  10. room_type_day as roomTypeDay2
  11. LEFT JOIN room_type as roomType2 on roomTypeDay2.room_type_id = roomType2.id
  12. AND roomType2.accommodation_id = 3
  13. WHERE
  14. roomTypeDay2.date IN ('2018-06-10 00:00:00', '2018-06-11 00:00:00')
  15. GROUP BY
  16. roomTypeDay2.room_type_id
  17. HAVING
  18. COUNT(roomTypeDay2.room_type_id) = 3
  19. union
  20. SELECT
  21. count(roomTypeDay2.room_type_id) as _days
  22. FROM
  23. room_type_day as roomTypeDay2
  24. LEFT JOIN room_type as roomType2 on roomTypeDay2.room_type_id = roomType2.id
  25. AND roomType2.accommodation_id = 3
  26. WHERE
  27. roomTypeDay2.date = '2018-06-09 00:00:00'
  28. and roomTypeDay2.min_night_stay <= 3
  29. AND roomTypeDay2.release_days <= 2
  30. GROUP BY
  31. roomTypeDay2.room_type_id
  32. HAVING
  33. COUNT(roomTypeDay2.room_type_id) = 3
  34. ) disponible
展开查看全部

相关问题