2013-12-12 33 views
1

我有一個名爲「dati」的表格,表示從1960年到2012年(所有年份都是連續的)年份的「anni」(主鍵)列,「governi」列表示參考表「governi」和「pil」這一列是我想要用表「governi」中的「presidenti」列中的值來提取的值。 如果我嘗試提取所有年份的最小值/最大值,它可以正常工作。但在這種情況下,我需要在有限的幾年內(例如從1980年到1990年)提取這些值。問題是不會返回任何最大/最小值。 正如您在數據庫模式中所看到的,表「dati」和表「governi」連接在「governo」列和「cod」列之間。Mysql查詢,範圍內的最大值和最小值無法正常工作,我該如何解決它?

這是數據庫結構:

TABLE dati: 
    anno INT(4), 
    governo VARCHAR(6), 
    pil FLOAT(10) 
TABLE governi: 
    cod VARCHAR(6), 
    presidente varchar (50) 

這是SQL:

QUERY1:

SELECT a.presidente, b.anno, b.$dato 
FROM governi AS a 
INNER JOIN dati AS b ON a.cod=b.governo 
WHERE b.$dato =(
    SELECT MAX(c.$dato) AS maxpil 
    FROM dati AS c 
) AND b.anno BETWEEN $inizio AND $fine; 

QUERY2:

SELECT a.presidente, b.anno, b.$dato 
FROM governi AS a 
INNER JOIN dati AS b ON a.cod=b.governo 
WHERE b.$dato = (
    SELECT MIN(NULLIF(c.$dato,0)) AS valore 
    FROM dati AS c 
) AND b.anno BETWEEN $inizio AND $fine; 

我怎麼能解決這個問題?

+0

此無關用PHP。這純粹是一個SQL構造問題。我已經撕掉了不相關的PHP代碼,只留下了sql。 –

+0

考慮提供適當的DDLs和/或和sqlfiddle一起使用期望的結果集 – Strawberry

+0

正確形成的問題包含答案的種子。問題的質量與無法找到答案之間有很強的相關性。 – Mihai

回答

1

試試這個

SELECT a.presidente, b.anno, b.$dato 
FROM governi AS a 
INNER JOIN dati AS b ON a.cod=b.governo 
WHERE b.$dato =(
    SELECT MAX($dato) AS maxpil 
    FROM dati,governi WHERE anno BETWEEN $inizio AND $fine AND governi.cod=dati.govern 
) 

SQL Fiddle

+1

謝謝,它完美的作品! –

0

嘗試此查詢:

SELECT a.presidente, b.anno, q.valore, q.maxpil 
FROM governi AS a 
INNER JOIN dati AS b ON a.cod=b.governo 
JOIN (
    SELECT MAX(anno) AS maxpil, 
      MIN(anno) AS valore 
    FROM dati AS c 
    WHERE c.anno BETWEEN 
      1965 -- $inizio 
      AND 
      2012 -- $fine 
) AS q 
ON b.anno BETWEEN q.valore AND q.maxpil 

演示 - >http://www.sqlfiddle.com/#!2/480e9/14

相關問題