2016-07-08 11 views
-2
id  name  salary  date 
1  aaa  10000  10/2/2014 
1  aaa  15000  06/04/2015 
1  aaa  20000  16/07/2016 
1  aaa  25000  10/04/2017 

従業員が毎年給与を引き上げた場合、 従業員の現在の給与はどのように取得できますか? そのクエリは毎年正常に動作するはずです。日付に基づく現在の給与の照会

私は2013年にそれを実行すると2013年の給料を表示し、2016年には2016年の給料を、2017年には2017年の給与も同様に表示します。

+0

あなたは 'MySQL'または' Oracle'を使用していますか? – Siyual

+0

MySQLまたはOracleを使用していますか? (別の製品、異なる日付/時刻関数) – jarlh

+0

両方が必要です – MahiA

答えて

0

チェックをMySQLのこのSQL Fiddle

SELECT 
    SUM(salary) as salary 
FROM salary 
WHERE YEAR(STR_TO_DATE(date, '%d/%m/%Y')) = YEAR(CURDATE()) 
GROUP BY id 
+0

すばらしかった私の友人に感謝します – MahiA

0

MySQLでは、あなたは次のように行うことができます。

select * form tablename where YEAR(now()) = YEAR(fieldname) 
0

ソリューションダミーデータ

ORACLE

SELECT * 
FROM SALARY_TABLE 
WHERE NAME = 'whatever_the_name_is' 
AND TRUNC(HIKE_DATE,'YYYY') = TRUNC(SYSDATE,'YYYY'); 

サンプル・クエリのための

WITH SALARY_TABLE AS -- Sample data queried from DUAL 
    (SELECT 1       AS ID, 
    'aaa'        AS name, 
    10000        AS salary, 
    TO_DATE('10/2/2014', 'dd/mm/yyyy') AS hike_date 
    FROM dual 
    UNION 
    SELECT 2, 'aaa', 15000, TO_DATE('06/04/2015', 'dd/mm/yyyy') FROM dual 
    UNION 
    SELECT 3, 'aaa', 20000, TO_DATE('16/07/2016', 'dd/mm/yyyy') FROM dual 
    UNION 
    SELECT 3, 'aaa', 25000, TO_DATE('10/04/2017', 'dd/mm/yyyy') FROM dual 
) 
SELECT * -- Actual solution 
FROM SALARY_TABLE 
WHERE NAME      = 'aaa' 
AND TRUNC(HIKE_DATE,'YYYY') = TRUNC(SYSDATE,'YYYY'); 
関連する問題