2012-04-08 19 views
9

Tablolarımdaki bazı alanlar arasındaki süreyi bulmaya çalışıyorum. Ancak, Postgresql kullanıyorum neden: (( DATEDIFF işlevini kullanamıyorum.) Ben net bir kılavuzları/öğreticiler PostGres'te benzer bir şeyi nasıl yapılacağını gösteren net bulamıyorum aynı şey ama PostgresTarihlerin farklarının hesaplanması Postgresql

Bu kadar temelde benim sorum ben bu yüzden Postgresql tarafından sağlanan özelliklerini kullanarak çalışır değiştirebilir nasıl DATEDIFF işlevini desteklenen bir RDBMS kullandıysa bu sorgu çalışacak assuming

?

SELECT Question.ID, 
Question.Status, COUNT (qUpdate.ID) AS NumberofUpdates, 
DATEDIFF (Question.LoggedTime,MIN(qUpdate.UpdateTime)) AS TimeBeforeFirstUpdate, 
DATEDIFF(Question.LoggedTime, MAX(qUpdate.UpdateTime)) AS TimeBeforeLastUpdate 
FROM qUpdate 
LEFT JOIN Question ON qUpdate.qID=Question.ID 
WHERE Question.Status = 'closed' AND qUpdate.Update NOT NULL 
GROUP BY Question.Status, Question.ID, Question.LoggedTime; 

daha fazla bilgi 'veya aSAP responsd edeceğiz türlü açıklamayı gerekir.

+3

Postgres özelliği çok zengin. Bu kılavuz aracılığıyla okumak gerçekten değer. – Glenn

+0

Üzgünüm Daha önce hiç gösterilmedim. Şu andan itibaren ona kesinlikle bakacağım :) – Jimmy

cevap

3

Sen age(<date1>, <date2>) fonksiyonunu (yerine DATEDIFF ait) kullanabilir .

Bu çalışması gerekir -

SELECT Question.ID, 
Question.Status, COUNT (qUpdate.ID) AS NumberofUpdates, 
age(Question.LoggedTime,MIN(qUpdate.UpdateTime)) AS TimeBeforeFirstUpdate, 
age(Question.LoggedTime, MAX(qUpdate.UpdateTime)) AS TimeBeforeLastUpdate 
FROM qUpdate 
LEFT JOIN Question ON qUpdate.qID=Question.ID 
WHERE Question.Status = 'closed' AND qUpdate.Update NOT NULL 
GROUP BY Question.Status, Question.ID, Question.LoggedTime; 

Not, psql'in bu hatayı verirse - ERROR: date/time field value out of range, o zaman uygun bir datestyle seçmek gerekir.

2
SELECT extract(year from age('2014-01-23', '1985-08-27')); 
-- returns 28 years, my current age.