SELECT中的字段在WHERE之前不存在。在https://blog.sqlauthority.com/2009/04/06/sql-server-logical-query-processing-phases-order-of-statement-execution/高峯。
SQL的正常處理順序是:
- FROM
- ON
- OUTER
- WHERE
- GROUP BY
- CUBE | ROLLUP
- HAVING
- 選擇
- DISTINCT 10 ORDER BY
- TOP
所以在您的查詢,不存在[的maxDate]產品尚未推出。要有一個用於WHERE,請使用CTE生成一個。然後應用WHERE。
注意:爲簡單起見,我使用INT的VALUE()
列。
SQL Fiddle
的MS SQL Server 2014架構設置:
CREATE TABLE t (field1 varchar(10), f2 int, f3 int, f4 int) ;
INSERT INTO t (field1, f2, f3, f4)
VALUES ('first',10,5,0), ('second',1,7,3), ('third',2,4,6) ;
查詢1:
; WITH a AS (
SELECT field1,
(
SELECT Max(v)
FROM (VALUES (f2), (f3), (f4)) AS value(v)
) AS maxF
FROM t
)
SELECT a.field1, a.maxF
FROM a
WHERE a.maxF = 6 ;
Results:
| field1 | maxF |
|--------|------|
| third | 6 |
哪個[DBMS]( https://en.wikipedia.org/wiki/DBMS)產品您使用? Postgres的?甲骨文? 「_SQL_」只是一種查詢語言,而不是特定數據庫產品的名稱。 –