2016-03-31 32 views
0

Çalışabileceğim SQL sorgusu var.SQL: Alt ağa göre alt sorgu filtresi

Veri Şeması

| Timestamp    | Status | Amount | 
|--------------------------|----------|--------| 
| 2016-03-23T08:03:34.204Z | Approved | 100 | 
| 2016-03-23T16:00:06.755Z | Declined | 450 | 
| 2016-03-30T10:18:43.846Z | Approved | 50010 | 

İstenilen denedim ne Çıktı

| Date  | Approved Count | Declined Count | 
|------------|----------------|----------------| 
| 2016-03-23 | 1    | 1    | 
| 2016-03-30 | 1    | 0    | 

hata iletisiyle başarısız

SELECT DATE(timestamp) AS Date, 

    (SELECT COUNT(*) 
    FROM db.transactions 
    WHERE status='Approved' 
    AND DATE(timestamp)=Date) AS Approved, 

    (SELECT COUNT(*) 
    FROM db.transactions 
    WHERE status='Declined') AS Declined 
FROM db.transactions a 
GROUP BY Date; 

..:

Amazon Redshift ile bir hata oluştu. GROUP BY aslında işlenen nedeniyle sütun "tarihi"

cevap

1

Eğer GROUP BY fıkrada sizin SELECT bendinde tanımlanan bir sütun diğer adı kullanmaya çalışıyor arasındadır alıyoruz mevcut değil hatası, takma kullanılamaz SELECT'dan önce. Sen GROUP BY DATE(timestamp) kullanarak hata kurtulmak, ancak bu koşullu toplamasıyla çok daha verimli yapılabilir:

SELECT DATE(timestamp) AS Date 
     ,SUM(CASE WHEN status='Approved' THEN 1 ELSE 0 END) AS Approved 
     ,SUM(CASE WHEN status='Declined' THEN 1 ELSE 0 END) AS Declined 
FROM db.transactions 
GROUP BY DATE(timestamp) 
+0

adresinde veya bu noktada sözdizimi hatası Bu tam olarak aradığım şey! ✋ – FloatingRock

0
SELECT DATE(timestamp), 

    (SELECT COUNT(*) 
    FROM db.transactions 
    WHERE status='Approved' 
    AND DATE(timestamp) AS Approved, 

    (SELECT COUNT(*) 
    FROM db.transactions 
    WHERE status='Declined') AS Declined 
FROM db.transactions GROUP BY Date; 
+0

'bir hata Amazon Redshift oluştu. "AS" – FloatingRock