我有一個包含受訓人員名單的表格,我必須找出離他們的練習結束還有多少天。該欄位包含練習開始日期,輸出應包含類似“Days(x)”的欄位。訣竅是只顯示那些參與培訓(8 個月)的學員。表的測驗值:
CREATE TABLE IF NOT EXISTS "interns" (
"intern_id" smallint(5) NOT NULL,
"f_name" varchar(20) NOT NULL,
"l_name" varchar(20) NOT NULL,
"gender" varchar(20) NOT NULL,
"pr_st_date" date DEFAULT NULL,
PRIMARY KEY ("intern_id");
INSERT INTO scheme.interns VALUES
(1,'Ivan','Ivanov','M','2020-09-22'),
(2,'Natalia','Kurtz','F','2021-01-12'),
(3,'Kristian','Tompson','M','2021-10-20'),
(4,'Libi','Uolsh','F','2021-12-30'),
(5,'Garry','Cutcher','M','2021-01-30'),
(6,'Steven','Larson','M','2021-02-25'),
(7,'Hugh','Laurie','M','2021-03-16'),
(8,'Jonny','Walker','M','2021-01-31'),
(9,'Ketty','Perri','F','2021-05-11'),
(10,'Liza','Torn','F','2020-11-28'),
(11,'Ely','Buggle','F','2021-01-16');
我不知道如何將負值AGE(CURRENT_DATE, "pr_st_date")與正值分開,我嘗試使用此功能過濾那些尚未開始實踐的實習生。幾乎所有的東西都用谷歌搜索,結果卡住了。PS:我剛剛開始學習SQL,所以很抱歉。
uj5u.com熱心網友回復:
尚未開始實習的實習生可以使用過濾掉,"pr_st_date" < CURRENT_DATE因為他們的開始日期將大于當前日期。
您可以嘗試以下操作:
第一個查詢顯示計算的邏輯/結果,而最終查詢可能是您要查找的內容。date_part這里用到了這個函式
查詢#1
SELECT
*,
AGE("pr_st_date") as age,
DATE_PART('year', AGE("pr_st_date")) as years,
DATE_PART('month',AGE("pr_st_date")) as months,
CURRENT_DATE,
CASE
WHEN "pr_st_date" < CURRENT_DATE AND
DATE_PART('year', AGE("pr_st_date")) < 1 AND
DATE_PART('month',AGE("pr_st_date")) <8 THEN 1
ELSE 0
END as in_training,
(CURRENT_DATE - "pr_st_date") as days_remaining
FROM
interns;
| 實習生_id | f_name | l_name | 性別 | pr_st_date | 年齡 | 年 | 月 | 當前的日期 | 在培訓中 | 剩余天數 |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 伊萬 | 伊萬諾夫 | 米 | 2020-09-22T00:00:00.000Z | {“年”:1,“天”:22} | 1 | 0 | 2021-10-14T00:00:00.000Z | 0 | 387 |
| 2 | 娜塔莉亞 | 庫爾茨 | F | 2021-01-12T00:00:00.000Z | {"月":9,"天":2} | 0 | 9 | 2021-10-14T00:00:00.000Z | 0 | 275 |
| 3 | 克里斯蒂安 | 湯普森 | 米 | 2021-10-20T00:00:00.000Z | {“天”:-6} | 0 | 0 | 2021-10-14T00:00:00.000Z | 0 | -6 |
| 4 | 力比 | 烏爾什 | F | 2021-12-30T00:00:00.000Z | {"月":-2,"天":-16} | 0 | -2 | 2021-10-14T00:00:00.000Z | 0 | -77 |
| 5 | 加里 | 切刀 | 米 | 2021-01-30T00:00:00.000Z | {"月":8,"天":15} | 0 | 8 | 2021-10-14T00:00:00.000Z | 0 | 257 |
| 6 | 史蒂文 | 拉森 | 米 | 2021-02-25T00:00:00.000Z | {"月":7,"天":17} | 0 | 7 | 2021-10-14T00:00:00.000Z | 1 | 231 |
| 7 | 休 | 勞里 | 米 | 2021-03-16T00:00:00.000Z | {"月":6,"天":29} | 0 | 6 | 2021-10-14T00:00:00.000Z | 1 | 212 |
| 8 | 強尼 | 沃克 | 米 | 2021-01-31T00:00:00.000Z | {"月":8,"天":14} | 0 | 8 | 2021-10-14T00:00:00.000Z | 0 | 256 |
| 9 | 凱蒂 | 佩里 | F | 2021-05-11T00:00:00.000Z | {"月":5,"天":3} | 0 | 5 | 2021-10-14T00:00:00.000Z | 1 | 156 |
| 10 | 麗莎 | 撕裂 | F | 2020-11-28T00:00:00.000Z | {"月":10,"天":16} | 1 | 10 | 2021-10-14T00:00:00.000Z | 0 | 320 |
| 11 | 伊利 | 號角 | F | 2021-01-16T00:00:00.000Z | {"月":8,"天":29} | 0 | 8 | 2021-10-14T00:00:00.000Z | 0 | 271 |
| 12 | 鮑勃 | 建造者 | 米 | 2021-10-01T00:00:00.000Z | {“天”:13} | 0 | 0 | 2021-10-14T00:00:00.000Z | 1 | 13 |
查詢#2
SELECT
*,
(CURRENT_DATE - "pr_st_date") as days_remaining
FROM
interns
WHERE
"pr_st_date" < CURRENT_DATE AND
DATE_PART('year', AGE("pr_st_date"))< 1 AND
DATE_PART('month',AGE("pr_st_date")) <8;
| 實習生_id | f_name | l_name | 性別 | pr_st_date | 剩余天數 |
|---|---|---|---|---|---|
| 6 | 史蒂文 | 拉森 | 米 | 2021-02-25T00:00:00.000Z | 231 |
| 7 | 休 | 勞里 | 米 | 2021-03-16T00:00:00.000Z | 212 |
| 9 | 凱蒂 | 佩里 | F | 2021-05-11T00:00:00.000Z | 156 |
| 12 | 鮑勃 | 建造者 | 米 | 2021-10-01T00:00:00.000Z | 13 |
查看 DB Fiddle 上的作業演示
讓我知道這是否適合您。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/316314.html
標籤:sql PostgreSQL
