SQL Firebird查询提供不正确的输出

SQL Firebird查询提供不正确的输出,sql,sql-order-by,firebird,Sql,Sql Order By,Firebird,我有以下Firebird查询: Select Distinct"Sorter", "Week" AS "WEEK", "Year", "Course" AS "Course" FROM ( select (extract(yearday from DATESENT) - extract(weekday from DATESENT-1)+7)/7 as "Sorter", case extract(week from DATESENT) when 1 then 'Week # 1 (2 Jan)

我有以下Firebird查询:

Select Distinct"Sorter", "Week" AS "WEEK", "Year", "Course" AS "Course"
FROM (
select
(extract(yearday from DATESENT) - extract(weekday from DATESENT-1)+7)/7 as "Sorter",
case extract(week from DATESENT)
when 1 then 'Week # 1 (2 Jan) '
when 2 then 'Week # 2 (09 Jan) '
when 3 then 'Week # 3 (16 Jan) '
when 4 then 'Week # 4 (23 Jan)'
when 5 then 'Week # 5 (30 Jan)'
when 6 then 'Week # 6 (06 Feb)'
when 7 then 'Week # 7 (13 Feb)'
when 8 then 'Week # 8 (20 Feb)'
when 9 then 'Week # 9 (27 Feb)'
when 10 then 'Week # 10 (06 March)'
when 11 then 'Week # 11 (13 March)'
when 12 then 'Week # 12 (20 March)'
when 13 then 'Week # 13 (27 March)'
when 14 then 'Week # 14 (03 April)'
when 15 then 'Week # 15 (10 April)'
when 16 then 'Week # 16 (17 April)'
when 17 then 'Week # 17 (24 April)'
when 18 then 'Week # 18 (01 May)'
when 19 then 'Week # 19 (08 May)'
when 20 then 'Week # 20 (15 May)'
when 21 then 'Week # 21 (22 May)'
when 22 then 'Week # 22 (29 May)'
when 23 then 'Week # 23 (05 Jun)'
when 24 then 'Week # 24 (12 Jun)'
when 25 then 'Week # 25 (19 Jun)'
when 26 then 'Week # 26 (26 Jun)'
when 27 then 'Week # 27 (03 July)'
when 28 then 'Week # 28 (10 July)'
when 29 then 'Week # 29 (17 July)'
when 30 then 'Week # 30 (24 July)'
when 31 then 'Week # 31 (31 July)'
when 32 then 'Week # 32 (07 Aug)'
when 33 then 'Week # 33 (14 Aug)'
when 34 then 'Week # 34 (21 Aug)'
when 35 then 'Week # 35 (28 Aug)'
when 36 then 'Week # 36 (04 Sep)'
when 37 then 'Week # 37 (11 Sep)'
when 38 then 'Week # 38 (18 Sep)'
when 39 then 'Week # 39 (25 Sep)'
when 40 then 'Week # 40 (02 Oct)'
when 41 then 'Week # 41 (09 Oct)'
when 42 then 'Week # 42 (16 Oct)'
when 43 then 'Week # 43 (23 Oct)'
when 44 then 'Week # 44 (30 Oct)'
when 45 then 'Week # 45 (06 Nov)'
when 46 then 'Week # 46 (13 Nov)'
when 47 then 'Week # 47 (20 Nov)'
when 48 then 'Week # 48 (27 Nov)'
when 49 then 'Week # 49 (04 Dec)'
when 50 then 'Week # 50 (11 Dec)'
when 51 then 'Week # 51 (18 Dec)'
when 52 then 'Week # 52 (25 Dec)'
end  as "Week" ,
extract(year from DATESENT) as "Year" ,
COURSE as "Course"


from programmers  
where
--** Change the Between date to select courses starting between those 2 dates format YYYY-MM-DD **--
DATESENT between '2012-12-20' and '2013-12-31'

Group by 1,2,3,4

UNION

select
(extract(yearday from BOOKING_DATE) - extract(weekday from  BOOKING_DATE-1)+7)/7 as "Sorter",
case extract(week from BOOKING_DATE)
when 1 then 'Week # 1 (2 Jan) '
when 2 then 'Week # 2 (09 Jan) '
when 3 then 'Week # 3 (16 Jan) '
when 4 then 'Week # 4 (23 Jan)'
when 5 then 'Week # 5 (30 Jan)'
when 6 then 'Week # 6 (06 Feb)'
when 7 then 'Week # 7 (13 Feb)'
when 8 then 'Week # 8 (20 Feb)'
when 9 then 'Week # 9 (27 Feb)'
when 10 then 'Week # 10 (06 March)'
when 11 then 'Week # 11 (13 March)'
when 12 then 'Week # 12 (20 March)'
when 13 then 'Week # 13 (27 March)'
when 14 then 'Week # 14 (03 April)'
when 15 then 'Week # 15 (10 April)'
when 16 then 'Week # 16 (17 April)'
when 17 then 'Week # 17 (24 April)'
when 18 then 'Week # 18 (01 May)'
when 19 then 'Week # 19 (08 May)'
when 20 then 'Week # 20 (15 May)'
when 21 then 'Week # 21 (22 May)'
when 22 then 'Week # 22 (29 May)'
when 23 then 'Week # 23 (05 Jun)'
when 24 then 'Week # 24 (12 Jun)'
when 25 then 'Week # 25 (19 Jun)'
when 26 then 'Week # 26 (26 Jun)'
when 27 then 'Week # 27 (03 July)'
when 28 then 'Week # 28 (10 July)'
when 29 then 'Week # 29 (17 July)'
when 30 then 'Week # 30 (24 July)'
when 31 then 'Week # 31 (31 July)'
when 32 then 'Week # 32 (07 Aug)'
when 33 then 'Week # 33 (14 Aug)'
when 34 then 'Week # 34 (21 Aug)'
when 35 then 'Week # 35 (28 Aug)'
when 36 then 'Week # 36 (04 Sep)'
when 37 then 'Week # 37 (11 Sep)'
when 38 then 'Week # 38 (18 Sep)'
when 39 then 'Week # 39 (25 Sep)'
when 40 then 'Week # 40 (02 Oct)'
when 41 then 'Week # 41 (09 Oct)'
when 42 then 'Week # 42 (16 Oct)'
when 43 then 'Week # 43 (23 Oct)'
when 44 then 'Week # 44 (30 Oct)'
when 45 then 'Week # 45 (06 Nov)'
when 46 then 'Week # 46 (13 Nov)'
when 47 then 'Week # 47 (20 Nov)'
when 48 then 'Week # 48 (27 Nov)'
when 49 then 'Week # 49 (04 Dec)'
when 50 then 'Week # 50 (11 Dec)'
when 51 then 'Week # 51 (18 Dec)'
when 52 then 'Week # 52 (25 Dec)'
end as "Week",
extract(year from BOOKING_DATE) as "Year" ,
'' as "Course"

from comp_Invoice
where
BOOKING_DATE between '2012-12-20' and '2013-12-31'

 )
GROUP BY 1,2,3,4
Order by 1,3 ASC
它返回以下内容:

SORTER - WEEK - YEAR - COURSE 0 -Week1 - 2013 - 1 -Week2 - 2013 - 1 -Week2 - 2013 - WHS 2 -Week3 - 2013 - 3 -Week4 - 2013 - 3 -Week4 - 2013 - WHS 4 -Week5 - 2013 - 4 -Week5 - 2013 - ALL 5 -Week6 - 2013 - 5 -Week6 - 2013 - REF 分拣机-周-年-课程 0-第1周-2013- 1-2周-2013- 2013年1-2周-WHS 2-第3周-2013- 2013年第3-4周- 2013年第3周第4周WHS 4-第5周-2013- 2013年第4周第5周-全部 5-第6周-2013- 5-第6周-2013-参考 正如我们所看到的,我得到了第2周、第4周、第5周和第6周的两行,但我需要返回如下:

SORTER - WEEK - YEAR - COURSE 0 -Week1 - 2013 - 1 -Week2 - 2013 - WHS 2 -Week3 - 2013 - 3 -Week4 - 2013 - WHS 4 -Week5 - 2013 - ALL 5 -Week6 - 2013 - REF 分拣机-周-年-课程 0-第1周-2013- 2013年1-2周-WHS 2-第3周-2013- 2013年第3周第4周WHS 2013年第4周第5周-全部 5-第6周-2013-参考
有什么建议吗?

Derek,看起来你想要最大值,为什么不试试这个

SELECT "Sorter", "WEEK", "Year", MAX("Course") FROM ( 
    "YOUR QUERY GOES HERE goes inside the 2 parenthesis"
) T1
GROUP BY 1,2,3
或者,如果您可以在同一周内有多个课程,请使用列表而不是MAX


希望这能有所帮助。

UNION语句组合两个或多个SELECT语句。但在我看来,您并不需要第二条语句的所有结果。输出是正确的,它正是您的查询所描述的投影
DISTINCT
仅过滤完全重复的内容。感谢您的评论,您对如何调整查询以提供我需要的内容有何建议?