43 lines
1.3 KiB
Python
43 lines
1.3 KiB
Python
import logging
|
|
from datetime import datetime
|
|
from typing import Dict, Any, Optional
|
|
import psycopg2
|
|
|
|
def get_commodity_statistics(conn: psycopg2.extensions.connection) -> Dict[str, Any]:
|
|
"""Get statistics about commodity data."""
|
|
cursor = None
|
|
try:
|
|
cursor = conn.cursor()
|
|
stats = {}
|
|
|
|
# Get basic counts
|
|
cursor.execute("""
|
|
SELECT
|
|
COUNT(DISTINCT id) as total_commodities,
|
|
COUNT(*) as total_prices,
|
|
MIN(date) as earliest_date,
|
|
MAX(date) as latest_date,
|
|
COUNT(DISTINCT commodity_id) as commodities_with_prices
|
|
FROM commodities_ref r
|
|
LEFT JOIN commodities_prices p ON r.id = p.commodity_id
|
|
WHERE r.is_active = true
|
|
""")
|
|
row = cursor.fetchone()
|
|
|
|
if row:
|
|
stats.update({
|
|
'total_commodities': row[0],
|
|
'total_prices': row[1],
|
|
'earliest_date': row[2],
|
|
'latest_date': row[3],
|
|
'commodities_with_prices': row[4]
|
|
})
|
|
|
|
return stats
|
|
except Exception as e:
|
|
logging.error(f"Error getting commodity statistics: {e}")
|
|
return {}
|
|
finally:
|
|
if cursor:
|
|
cursor.close()
|