我試圖拉一些星期超過一週,並且我建立的查詢得到的數據,但是可怕的很慢。拉動趨勢數據WeeK過去一週
SELECT app_client_id
, (SELECT COUNT(b.app_id) FROM `li_appointments` AS b
WHERE YEARWEEK(b.app_datetime) = YEARWEEK(DATE_ADD(NOW(),INTERVAL -1 WEEK))
AND b.app_client_id = a.app_client_id)
, (SELECT COUNT(b.app_id) FROM `li_appointments` AS b
WHERE YEARWEEK(b.app_datetime) = YEARWEEK(DATE_ADD(NOW(),INTERVAL -2 WEEK))
AND b.app_client_id = a.app_client_id)
FROM `li_appointments` AS a
EXPLAIN給了我這樣的:
|id||select_type ||table||type ||possible_keys||key ||key_len||ref||rows ||Extra |
|1 ||PRIMARY ||a ||index|\N |Extra||18 |\N |61901||Using index|
|3 ||DEPENDENT SUBQUERY||b ||index|\N |Extra||18 |\N |61901||Using where; Using index|
|2 ||DEPENDENT SUBQUERY||b ||index|\N |Extra||18 |\N |61901||Using where; Using index|
被refrenced表是:
create table `li_appointments` (
`app_id` int (11),
`app_datetime` datetime ,
`app_facility` varchar (600),
`app_department` varchar (600),
`app_address` varchar (600),
`app_language` varchar (600),
`app_requesting_person` varchar (600),
`app_service_provider` varchar (600),
`app_client_id` int (11),
`app_client_other` varchar (600),
`app_medicaid_status` int (11),
`app_health_program` varchar (150),
`les_name` varchar (500),
`les_dob` varchar (75),
`les_medicaid_id` varchar (500),
`billing_total_time` time ,
`billing_workorder_received` int (11),
`billing_admin_fee` float ,
`billing_notes` varchar (3000),
`app_notes` varchar (3000),
`created_by` varchar (300),
`created_on` datetime ,
`modified_by` varchar (300),
`modified_on` datetime ,
`wo_entered_by` varchar (300),
`app_callback_num` varchar (135),
`terp_id` varchar (135),
`app_covered_by` varchar (135),
`covered_on` datetime ,
`uofu_csn` varchar (135));
有沒有更好的方式來獲得這些數據?
我喜歡這個(不需要子查詢),但我認爲它應該是'> ='而不是'>'。 – PlantTheIdea
@PlantTheIdea你可能對'> ='和'>'是正確的,它將取決於OP是否想要在一週前包含或排除從NOW()到精確的第二秒。 –
我喜歡它看起來很乾淨,但是我得到這個錯誤:錯誤代碼:1064 您的SQL語法錯誤;檢查對應於你的MySQL服務器版本正確的語法使用近 'CASE AS LAST_WEEK_COUNT), SUM(CASE WHEN app_d' 手冊在第7行 –