[英]Get the first rownumber by variable
我有下面的代碼,我想拉表中的第一個rownu = 1
,但是當我在where語句中編寫它時,我得到一個錯誤:
SELECT
*
FROM
(SELECT
VID,
SPRTELE_PHONE_NUMBER AS Phone,
ROW_NUMBER() OVER (PARTITION BY VID ORDER BY SPRTELE_TELE_cODE desc) AS ROWNU
FROM
PERSONNEL_VIEW, SPRTELE
WHERE
SPRTELE_PIDM = PIDM
AND (SPRTELE_SEQNO = (SELECT MAX (SPRTELE_SEQNO)
FROM SPRTELE
WHERE SPRTELE_PIDM = PIDM)))
) DATA
WHERE
DATA.ROWNU = 1
UNION
SELECT
*
FROM
(SELECT
VID,
SPRTELE_PHONE_NUMBER AS Phone,
'1' AS ROWNU
FROM
STUDENT_VIEW, SPRTELE
WHERE
SPRTELE_PIDM = PIDM
AND (SPRTELE_SEQNO = (SELECT MAX (SPRTELE_SEQNO)
FROM SPRTELE
WHERE SPRTELE_PIDM = PIDM))
AND TERM_CODE = '201920'
) DATA
WHERE
data.rownu = 1;
輸出是這樣的
VID PHONE ROWNU
-----------------------------
VI1003365 5891449 1
VI2380659 4932389 1
VI2997998 6371006 1
VI2997998 5821347 2
我只需要拉出rownu=1
,但是在代碼中放入“ rownu = 1”時出現錯誤。
您將需要為此創建一個子查詢:
SELECT *
FROM (
SELECT vid,
sprtele_phone_number AS Phone,
Row_number()
OVER (
partition BY vid
ORDER BY sprtele_tele_code DESC) AS ROWNU
FROM personnel_view,
sprtele
WHERE sprtele_pidm = pidm
AND ( sprtele_seqno = (SELECT Max (sprtele_seqno)
FROM sprtele
WHERE sprtele_pidm = pidm) )
) DATA
WHERE DATA.ROWNU =1;
您可以在這里閱讀原因: https : //www.sqltheater.com/blog/cant-use-row-number-where/
- 編輯 -
如果查詢變得更加復雜,則可以使用WITH子句,如下所示:
WITH UNION_DATA AS (
SELECT VID,
SPRTELE_PHONE_NUMBER AS Phone,
ROW_NUMBER()
OVER (
PARTITION BY VID
ORDER BY SPRTELE_TELE_cODE desc) AS ROWNU
FROM PERSONNEL_VIEW , SPRTELE
WHERE SPRTELE_PIDM = PIDM
AND (SPRTELE_SEQNO =
(SELECT MAX (SPRTELE_SEQNO)
FROM SPRTELE
WHERE SPRTELE_PIDM = PIDM ))
UNION
SELECT VID,
SPRTELE_PHONE_NUMBER AS Phone,
'1' AS ROWNU
FROM STUDENT_VIEW, SPRTELE
WHERE SPRTELE_PIDM = PIDM
AND (SPRTELE_SEQNO =
(SELECT MAX (SPRTELE_SEQNO)
FROM SPRTELE
WHERE SPRTELE_PIDM = PIDM ))
AND TERM_CODE = '201920')
SELECT *
FROM UNION_DATA UD
WHERE UD.ROWNU = 1
閱讀有關WITH子句的更多信息: https : //docs.oracle.com/cd/E17952_01/mysql-8.0-zh/with.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.